所以我尝试将redux
与react-native-fbsdk
包一起用来登录用户,但是如果我不知道怎么回事,即使在登录后授予权限,权限也会被拒绝屏幕。控制台日志如下所示:
在这里,您可以看到我对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
}
}
设定:
答案 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