#amazon-web-services #amazon-cognito
Вопрос:
Мне нужно сбросить пароли некоторых пользователей, но не отправлять электронные письма с забытым паролем. Просто сбросьте пароль, чтобы при следующем входе в систему я мог отобразить сообщение о том, что им необходимо запросить сброс пароля. Детализация самой основной вещи, которая мне нужна: не сообщая пользователю, мне нужно ввести их в RESET_REQUIRED
статус, чтобы доступ пользователя к интерфейсу возвращал a PasswordResetRequiredException
.
Я изначально думал AdminSetUserPassword
, что это сработает, но это приводит пользователя в состояние, когда ему нужно сменить пароль через какой-то пользовательский интерфейс, который я не настроил. Я не уверен, есть ли там дополнительный шаг, который я могу предпринять-установить пароль, AdminSetUserPassword
а затем, возможно, предпринять какие-то другие шаги?
В противном случае, я перепробовал кучу разных вещей AdminResetUserPassword
.
- Попытался удалить любое пользовательское сообщение из моей лямбды, которое запускается на
CustomMessage_ForgotPassword
триггере, но это просто приводит к отправке общего сообщения с кодом. - Попытался изменить
email_verified
атрибут для пользователя наfalse
(поскольку в документах AWS указано, что он отправит электронное письмо для сброса пароля, если у них есть подтвержденное электронное письмо), но это приводит к тому, что сам сброс пароля вызывает ошибку. - Попытался изменить адрес электронной почты пользователя на временный (поддельный), чтобы туда отправлялось электронное письмо, но пользователь получает электронное письмо, когда его адрес электронной почты изменен.
У кого-нибудь есть какой-либо опыт в этом, или это невыполнимая просьба?
Ответ №1:
Я разбирался с этим сегодня и подумал, что дам вам знать, чем я в итоге занялся.
Есть два способа, и только два способа, чтобы ввести пользователя в RESET_REQUIRED
статус:
- Воспользуйся
AdminResetUserPassword
- Импортируйте пользователя с помощью задания импорта Cognito (как видно на этой блок-схеме).
Как вы определили, вариант 1 отправит код по электронной почте или SMS, и нет, вы не можете легко предотвратить это. Я открыл службу поддержки в службе поддержки AWS, чтобы спросить об этом, и они тоже ничего не смогли придумать. В конце концов, я подумал об использовании пользовательских триггеров отправителя, чтобы в этом триггере я мог решить, отправлять ли электронное письмо/SMS или нет, но с настройкой внешнего отправителя электронной почты/SMS возникла такая проблема, что я решил не беспокоиться об этом.
В нашем случае мы переносили пользователей из одного пула пользователей в другой, поэтому метод импорта работал довольно хорошо. Если вы хотите просто сбросить пароль пользователя в существующем пуле пользователей, вы также можете использовать метод импорта:
- Прочитайте атрибуты пользователя, параметры MFA и т. Д. С помощью
AdminGetUser
- Храните эти данные в надежном месте
- Удалите пользователя из пула Cognito с помощью
AdminDeleteUser
- Импортируйте пользователя, создав и запустив задание импорта Cognito
Это приведет к тому, что ваш пользователь перейдет в RESET_REQUIRED
состояние, но есть и недостатки:
- Пользователь
sub
изменится - Запоминаемые устройства пользователя исчезнут
- История входа пользователя в систему исчезнет
- Программные устройства MFA пользователя исчезнут
Так что это довольно дерьмовое решение, но это то, что Cognito дал нам для работы.