Я создаю приложение React Native, используя Expo и AWS Cognito с AWS Amplify, и пытаюсь включить вход в Facebook, Google и т. Д. С помощью AWS
Я могу создать пользователя и войти в систему с помощью API Cognito без каких-либо проблем.
Однако для использования сторонних производителей необходимо использовать функциональность Expo AuthSession.
Функциональность сама по себе работает нормально, и я могу полностью получить нужные токены из моей конечной точки / oauth2 / token.
Однако, что касается Amplify (и я знаю), пользователь не вошел в систему, поэтому, когда я пытаюсь получить Auth.currentAuthenticatedUser (), возвращается значение null.
// Open URL in a browser
openURL = async (url) => {
let result = await AuthSession.startAsync({ authUrl: url })
this.getTokenbyCode(result.params.code)
};
getTokenbyCode = async (code) => {
const details = {
grant_type: 'authorization_code',
code,
client_id: '10eavoe3ufj2d70m5m3m2hl4pl',
redirect_uri: AuthSession.getRedirectUrl()
}
const formBody = Object.keys(details)
.map(
key => `${encodeURIComponent(key)}=${encodeURIComponent(details[key])}`
)
.join("&");
await fetch(
'https://presentor.auth.us-west-2.amazoncognito.com/oauth2/token',
{
method: "POST",
headers: {
'Content-type': 'application/x-www-form-urlencoded;charset=UTF-8'
},
body: formBody
}
)
.then(async (res) => {
console.log('res: ', res);
let resJSON = await res.json();
let idToken = await resJSON.id_token;
let decodedToken = jwt(idToken);
let userData = {
Username : decodedToken["cognito:username"],
Pool : Auth.userPool
}
})
.catch(error => {
console.log('error: ', error);
});
}
Когда я декодирую токен, я вижу полезную нагрузку, как я ожидаю, но если я хочу, например, использовать API-интерфейсы для обновления токена, если срок его действия истекает, я должен обойти его вручную (проверить срок действия и получить новый токен, если срок его действия истек).
Я что-то упустил?