Аутентификация 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 с фильтром, установленным на адрес электронной почты = адрес электронной почты запроса на регистрацию. Если получены какие-либо результаты, отклоните запрос на регистрацию.

Другие вопросы по тегам