Я пытаюсь реализовать аутентификацию по ссылке без пароля.Например, пользователь вводит свой адрес электронной почты -> Cognito отправить электронное письмо со ссылкой, по которой пользователь может нажать и войти в систему.Это
Это поддерживается Cognito через пользовательский вызов.Например, https://aws -amplify.github.io / ampify-js / media / authentication_guide # using-a-custom-challenge
Я создал DefineAuthChallenge
, CreateAuthChallenge
, VerifyAuthChallenge
лямбда-функция, которая связана с моим пулом Cognito.CreateAuthChallenge
генерирует код, который отправляется на электронную почту пользователя со ссылкой на сайт.
Далее я планировал получить этот код с URL-адреса на сайте и войти в систему через него, как в документации
Auth.signIn(username)
.then(user => {
if (user.challengeName === 'CUSTOM_CHALLENGE') {
Auth.sendCustomChallengeAnswer(user, challengeResponse)
.then(user => console.log(user))
.catch(err => console.log(err));
} else {
console.log(user);
}
})
.catch(err => console.log(err));
Но здесь есть проблема.Auth.sendCustomChallengeAnswer
требуется пользовательский объект, который передается из Auth.signIn
.Но если пользователь просто щелкнет ссылку из электронного письма, то никакого пользовательского объекта вообще не будет.И усиление lib не сохраняет этот объект пользователя среднего сеанса, поэтому при перезагрузке страницы он теряется.Он сохраняется только в том случае, если авторизация завершена в его хранилище https://github.com/aws-amplify/amplify-js/blob/master/packages/amazon-cognito-identity-js/src/CognitoUser.js#L175
Поэтому вопрос заключается в том, как сохранить и восстановить пользовательский объект из функции Auth.signIn
при перезагрузке страницы.Или если есть лучший подход для входа через ссылку без пароля?