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));
Другие вопросы по тегам