Я пытаюсь интегрировать логин Facebook в свое приложение React Native.
Мне удалось успешно реализовать метод Auth.signIn (), и я могу последовательно извлекать пользователя, используя Auth.currentAuthenticatedUser ().
Однако, когда я использую Auth.currentAuthenticatedUser () после получения кода от входа в Facebook, он возвращает ноль.
Более того, когда я перезагружаю приложение, Auth.currentAuthenticatedUser () возвращает пользователя, как и ожидалось.
Я не понимаю, почему после создания сеанса пользователя с токенами он не распознает, что у меня есть аутентифицированный пользователь.
Вот мой код:
getTokenbyCode = async (code) => {
const details = {
grant_type: 'authorization_code',
code,
client_id: userPool.clientId,
redirect_uri: AuthSession.getRedirectUrl()
}
const formBody = Object.keys(details)
.map(
key => `${encodeURIComponent(key)}=${encodeURIComponent(details[key])}`
)
.join("&");
await fetch(
tokenURL,
{
method: "POST",
headers: {
'Content-type': 'application/x-www-form-urlencoded;charset=UTF-8'
},
body: formBody
}
)
.then(async (res) => {
let tokenRequestJson = await res.json();
const IdToken = new CognitoIdToken({ IdToken: tokenRequestJson.id_token });
const AccessToken = new CognitoAccessToken({ AccessToken: tokenRequestJson.access_token });
const RefreshToken = new CognitoRefreshToken({ RefreshToken: tokenRequestJson.refresh_token })
try {
let userSession = new CognitoUserSession({ IdToken, AccessToken, RefreshToken });
const userData = {
Username: userSession.idToken.payload.email,
Pool: userPool
};
cognitoUser = new CognitoUser(userData);
cognitoUser.setSignInUserSession(userSession);
cognitoUser.getSession(async (err, session) => { // You must run this to verify that session (internally)
if (session.isValid()) {
// EVERYTHING WORKS UP TO HERE <!---------------->
let cognitoUser = await Auth.currentAuthenticatedUser()
this.setState({user: cognitoUser})
this.props.navigation.navigate('AuthLoading', {user: cognitoUser})
} else {
console.log('session is not valid: ', session);
}
})
}
catch (FBSignInError) {
console.log('FBSignInError: ', FBSignInError)
}
})
.catch(error => {
console.log('error: ', error);
});
}