AWS Amplify: функция забытого пароля с пользовательским интерфейсом
Я пытаюсь реализовать страницу входа, содержащую "Забыли пароль?" кнопка, которая открывает форму, которая затем позволяет пользователю отправить электронное письмо, которое одновременно является именем пользователя, и, если эта запись существует в Cognito, следует запустить процесс сброса пароля.
Одна из проблем, с которыми я столкнулся на данный момент, заключается в том, что я не уверен, как на самом деле получить соответствующее имя пользователя из Cognito, поскольку все логины электронной почты, похоже, получают назначенные уникальные хэши и не хранятся в виде обычного текста в Cognito.
Я посмотрел код ниже строки 1000 здесь, в документах, но это также, кажется, предполагает, что у вас есть соответствующее имя пользователя и другие атрибуты.
(Регистрация должна быть возможна только администраторами, в настоящее время просто через консоль AWS).
Любые идеи о том, как это может быть реализовано? Спасибо!
1 ответ
Хорошо, дайте мне знать, если вам нужна дополнительная информация. Это немного отличается от большинства процессов забытых паролей в том, что они требуют кода, как вы упоминаете. Я думаю, что вас может сбить с толку то, что имя пользователя - это просто электронная почта пользователя (или то, что вы называете именем пользователя для своего пула пользователей Cognito). Это не идентификатор пользователя Cognito или что-то еще.
Я использую 4 входа для получения всей необходимой информации и две формы. Вы можете легко использовать только одну форму.
Первый вход собирает электронную почту; Я поместил этот вклад в его собственную форму с инструкциями. Затем вы запускаете метод Auth.forgotPassword, указанный ниже (укажите входное значение электронной почты в качестве переменной username).
AWS отправит код подтверждения вашему пользователю (если вы изменяете формат своих сообщений в консоли Cognito; код будет использовать формат "кода подтверждения", по крайней мере, для SMS-сообщений).
Я думаю, что по умолчанию, если вы собрали номер телефона и предоставили его Cognito во время регистрации, код должен перейти на номер телефона пользователя через SMS. Если нет, я бы предположил, что код отправляется на электронную почту пользователя, хотя я точно не знаю (у меня есть номер телефона пользователя в Cognito, и я никогда не получал этот код по электронной почте).
Остальные три ввода должны быть: код, пароль, подтвердить пароль. У меня есть эти три на второй форме. Пользователь вводит код в форму ввода кода, вводит новый пароль и проверяет новый пароль.
Вы берете электронную почту (из другой формы), код и пароль, а также используете метод Auth.forgotPasswordSubmit (введите значение ввода электронной почты снова в качестве имени пользователя, значение ввода кода в качестве кода и значение ввода пароля в качестве пароля).
Вам на самом деле не нужно сообщение "data", возвращаемое любым из методов (я думаю, что это просто строка с надписью "success", если я правильно помню).
Если пользователь не находится в системе, метод Auth.forgotPassword вернет ошибку (что-то вроде "пользователь не найден").
Пожалуйста, найдите подходящие методы ниже (скопировано из документации):
import { Auth } from 'aws-amplify';
Auth.forgotPassword(username)
.then(data => console.log(data))
.catch(err => console.log(err));
// Collect confirmation code and new password, then
Auth.forgotPasswordSubmit(username, code, new_password)
.then(data => console.log(data))
.catch(err => console.log(err));