Как добавить пользователя в собственную базу данных во время регистрации «транзакционным» способом?

#amazon-web-services #amazon-cognito

#amazon-web-services #amazon-cognito

Вопрос:

Я пытаюсь использовать AWS Cognito для своего приложения.

Я могу успешно зарегистрировать пользователей в AWS Cognito, но я хочу иметь возможность также сохранять их в своей базе данных (с моим собственным API), как часть процесса регистрации.

Я видел, что могу использовать триггерную функцию, такую как Post confirmation, но, насколько я понимаю, если сохранение пользователя в моей базе данных завершится неудачей, пользователь все равно будет создан в пуле пользователей Cognito.

Я хочу обработать процесс регистрации транзакционным способом, чтобы при сбое сохранения пользователя в моей базе данных весь процесс завершался с ошибкой.

Итак, это будет выглядеть примерно так:

   Aws Cognito Sign Up -> Send_to_database_trigger ----fails----> user is not created 
                                                  ---success--> user is created
  

Есть ли какой-нибудь способ добиться того, чего я хочу? Спасибо.

Ответ №1:

Вы можете использовать лямбда-триггер предварительной регистрации.

В случае сбоя он получает имя пользователя и все атрибуты пользователя, и в случае сбоя пользователь не будет зарегистрирован в Cognito.

В вашем случае вы сохраните своего пользователя в своей базе данных в этом триггере (после других возможных проверок) и потерпите неудачу, если сохранение в вашей базе данных не удалось. Таким образом, вы можете быть уверены, что если пользователь существует в Cognito, он также существует в вашей базе данных.

Если вам нужно сохранить sub , вы можете реализовать как предварительную регистрацию, так и подтверждение после подтверждения, а также обновить запись в базе данных с sub помощью триггера подтверждения после подтверждения.

Комментарии:

1. Насколько я понимаю, это используется для проверки, так что, если он не соответствует некоторым требованиям, пользователь не будет зарегистрирован.

2. Вы можете написать там свою собственную логику, поэтому в вашем случае ваша «пользовательская проверка» заключается в том, что запись в вашу базу данных прошла успешно. Если вам нужно добавить дополнительную проверку, вы можете сделать это там также перед записью в свою базу данных.

3. Да, но в этом случае возникает обратная проблема: что, если триггер каким-то образом выйдет из строя? Затем в базе данных останется нежелательная информация о пользователе.

4. Если вы «возвращаетесь» сразу после сохранения в своей базе данных, нет никаких причин, по которым Cognito завершится неудачей. Кроме того, есть вероятность, что Cognito всегда будет иметь лучшую доступность и логику повторных попыток, чем ваша база данных, поэтому делать это в таком порядке должно быть лучше.

5. У вас также может быть запланированная лямбда-функция для очистки вашей базы данных в редких случаях, когда Cognito выходит из строя после запуска.