Аутентификация Cognito с использованием имени пользователя или уникального адреса электронной почты через AWS Amplify
Amplify CLI-аутентификация с помощью пулов пользователей Cognito в настоящее время имеет два основных режима: вход с использованием имени пользователя или электронной почты. В первом случае уникальность электронной почты как обязательный атрибут пользователя не применяется.
Сервис Cognito сам по себе поддерживает параметр "Также разрешить вход с подтвержденным адресом электронной почты" (Консоль AWS, раздел атрибутов пользовательского пула), но его можно установить только при создании пула пользователей (т.е. не может быть изменен позже - флажки отключены). Можно ли запретить дублирование электронных писем в пользовательском пуле, разрешив пользователям аутентифицироваться с помощью имени пользователя или электронной почты?
Подводя итог, мой вариант использования требует:
- Проверка / обеспечение уникальности атрибутов электронной почты на уровне Cognito при регистрации пользователей через Amplify
Auth.SignUp
; - Сохранение входа на основе имени пользователя, но разрешение пользователям также входить в систему со своей электронной почтой (то есть
Auth.SignIn
с адресом электронной почты или именем пользователя, указанным в качестве аргумента имени пользователя).
2 ответа
Когда вы добавляете пул пользователей, выберите «Имя пользователя» в качестве метода, с помощью которого вы хотите, чтобы пользователи входили в систему при появлении запроса.
Если вам не предлагается этот выбор, вам может потребоваться повторить попытку, но на этот раз выберите «Ручная настройка», когда будет предложено в начале.
После того, как вы завершили всю настройку аутентификации через
При этом создается новый файл, который вы можете редактировать с помощью кода AWS CDK, чтобы настроить свои ресурсы Cognito за пределами возможностей, предоставляемых интерфейсом командной строки.
Вы можете найти
amplify\backend\auth\<your_app_name>\override.ts
Внутри файла переопределения добавьте следующую строку в пустую функцию, созданную для вас:
resources.userPool.aliasAttributes = ['email'];
Теперь вы можете сохранить файл и запустить его, и, надеюсь, ваш новый пул пользователей покажет в консоли AWS, что вы успешно настроили его, чтобы разрешить совместный вход с именем пользователя и адресом электронной почты.
Вы должны убедиться, что вы написали код переопределения, прежде чем
Если вы окажетесь в таком положении, вам нужно будет создать новый пул пользователей, вы не сможете изменить существующий.
Ознакомьтесь с лямбда-триггерами Cognito .
Триггер предварительной регистрации должен соответствовать вашему сценарию использования.
Вы можете создать собственную лямбду, в которой сможете определить логику обеспечения уникального адреса электронной почты. Затем вы регистрируете эту лямбду в Cognito, чтобы она вызывалась перед регистрацией и давала вам возможность отклонить регистрацию, если адрес электронной почты уже существует.
Чтобы проверить, существует ли уже пользователь с таким же адресом электронной почты, вы можете использовать API ListUsers Cognito с фильтром, установленным на адрес электронной почты = адрес электронной почты запроса на регистрацию. Если получены какие-либо результаты, отклоните запрос на регистрацию.