Пользовательская аутентификация AWS Cognito - отправка метаданных в лямбда-функции вызова - PullRequest
0 голосов
/ 04 июня 2018

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

При этом используются лямбда-функции собственной аутентификации для определения/ создать запрос с паролем на основе времени и отправить его пользователю по электронной почте.У меня возникла пара проблем:

Проблема 1)

Когда пользователь возвращается с кодом, он может быть не в том же браузере / устройстве и, конечно, не будет на той же вкладкепоэтому у них нет сессии, то есть мне нужно снова вызвать cognitoUser.initiateAuth.Это снова проходит через лямбда-вызовы define / create, поэтому второе электронное письмо отправляется, даже если в этот момент пользователь приходит по электронной почте и уже имеет код.Примечание: идентификатор сеанса недоступен в объекте события при создании запроса, также я прочитал эти сеансы только последние 3 минуты, и мои пароли, основанные на времени, продлятся ~ 15 минут, поэтому я не думаю, что могу включить сеансидентификатор в электронном письме.

Проблема 2)

Вы можете войти из нескольких мест (браузер, приложение для Android и т. д.), и я хотел бы иметь возможность включить URL или хотя бы протоколв качестве параметра для управления тем, что отправляется в электронном письме, например, если вы ввели свой адрес электронной почты в приложении для Android, то полученное вами электронное письмо будет иметь вид myapp: // login? code = xxx, и если вы сделаете это в Интернете, это будетhttps://example.com/login?code=xxx

Похоже, что я смог бы реализовать оба этих способа для правильной работы, если бы я только мог найти какой-нибудь способ отправки пользовательских метаданных через лямбду DefineChallenge и CreateChallenge, чтобы они появлялись в событииобъект.Я думал, что добавление ValidationData к объекту AuthenticationDetails сделает это, но эта информация не появляется в объекте события в лямбда-фн.

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

Итак, я хочу отправить пользовательские метаданные из моего вызова cognitoUser.initiateAuth (...) в JS и иметьэто доступно в моем Определении / Создании Вызова лямбда-фн.

...