#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 выходит из строя после запуска.