React Native:Facebook权限总是被拒绝

时间:2017-07-27 15:50:48

标签: reactjs react-native redux facebook-javascript-sdk react-redux

所以我尝试将reduxreact-native-fbsdk包一起用来登录用户,但是如果我不知道怎么回事,即使在登录后授予权限,权限也会被拒绝屏幕。控制台日志如下所示:

Console logs

在这里,您可以看到我对authFailure的行动:

export function authFailure(authError) {
  return {
    type: AUTH_FAILURE,
    action.authError.message
  }
}

这是在onPress执行的函数,调度动作authStarted(),然后调用处理fbsdk的函数_fbAuthAPI()。这可以在下面看到。

export function _fbAuth() {
  return (dispatch) => {
    dispatch(authStarted())
    const values = []
    _fbAuthAPI().then((result) => {
      values.concat(result.accessToken)
      return _getUserInformationAPI(result.accessToken)
    }).then((profile) => {
      values.concat(profile)
      dispatch(authSuccess(...values))
    }).catch((error) => {
      dispatch(authFailure(error))
      setTimeout(() => {
        dispatch(authFailureRemove())
      }, 4000)
    })
  }
}

export function _fbAuthAPI() {
  return new Promise((resolve, reject) => {
    LoginManager.logInWithReadPermissions(['public_profile', 'email']).then((result) => {
      if (result.isCancelled) {
        throw new Error('Login was cancelled')
      } else if (result.declinedPermissions) {
        throw new Error('Permissions were declined')
      } else {
        return AccessToken.getCurrentAccessToken()
      }
    }).then((result) => {
      resolve(result)
    }).catch((error) => {
      reject(error)
    })
  })
}

至于减速器:

export default function authReducer(state = initialState, action) {
  switch (action.type) {
    case AUTH_STARTED:
      return Object.assign({}, state, {
        authenticating: true
      })
      break
    case AUTH_SUCCESS:
      return Object.assign({}, state, {
        authenticating: false,
        authError: false,
        facebookToken: facebookToken,
        facebookProfile: facebookProfile
      })
      break
    case AUTH_FAILURE:
      return Object.assign({}, state, {
        authenticating: false,
        authError: authError
      })
      break
      ...
    default:
      return state
  }
}

设定:

  • React Native 0.45.1
  • React Native FBSDK" ^ 0.6.1"
  • Redux" ^ 3.7.1"
  • MacOS Sierra 10.12.6

2 个答案:

答案 0 :(得分:1)

我无法帮助Facebook SDK和身份验证,但authError未定义是因为在本节中,authError确实是未定义的

case AUTH_FAILURE:
      return Object.assign({}, state, {
        authenticating: false,
        authError: authError   // Where is this coming from?
      })
      break

我认为你打算在那里authError: action.authError

答案 1 :(得分:0)

哎呀,所以我设法解决了这个问题。 基本上,当你在ByteString的结果上调用declinedPermissions时,它总是返回true,因为它是一个数组..然后,即使你没有任何拒绝的权限,它也是如此。

解决问题的简单方法是查看数组中的内容并根据它确定要执行的操作:

logInWithReadPermissions