Миграция пользователя в Cognito при входе - PullRequest
0 голосов
/ 04 декабря 2018

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

Вот код в c #:

    public async Task<Stream> FunctionHandlerAsync(Stream stream, ILambdaContext context)
{
      RootObject rootObj = DeserializeStream(stream);
      User user = new User(rootObj.userName, rootObj.request.password);

      ApiResponse apiResponse = await MobileAuthenticateAsync(user.UserName, user.Password);

    // Considering apiResponse returns "user authenticated", we create the user in //cognito. This is working.

    // How do I send response back to Application so it knows that user is // //created and authenticated and should be allowed to login.

    //Before returning stream, I am setting following 2 status.

     rootObj.response.finalUserStatus = "CONFIRMED"; // is this correct ?
     rootObj.response.messageAction = "SUPPRESS";

     return SerializeToStream(rootObj);;
}

1 Ответ

0 голосов
/ 04 декабря 2018

Вы довольно близки.

Вы можете увидеть полную документацию на странице Лямбда-триггер Migrate User , однако вкратце ваш ответ должен выглядеть так:

{
  response: {
    userAttributes: {
      email: 'user@example.com',
      email_verified: true,
      custom:myAttribute: 123,
    },
    finalUserStatus: 'CONFIRMED',
    messageAction: 'SUPPRESS',
    forceAliasCreation: false,
  }
}

Где:

  • userAttribute: это словарь / карта ключей атрибутов пользователя в Cognito (обратите внимание, что любые пользовательские атрибуты должны иметь префикс custom:), чтобызначения из системы, из которой вы переходите.Вам не нужно предоставлять все это, хотя, если вы используете псевдоним электронной почты, вы можете установить email_verified: true, чтобы пользователю не приходилось повторно проверять свой адрес электронной почты.
  • finalUserStatus: если вы установите значение CONFIRMED, тогда пользователю не придется повторно подтверждать свой адрес электронной почты / номер телефона, что, вероятно, является разумным значением по умолчанию.Если вы обеспокоены тем, что пароль вводится в виде простого текста для Cognito впервые, вместо этого вы можете использовать RESET_REQUIRED, чтобы заставить их сменить пароль при первом входе в систему.
  • messageAction:должно быть SUPPRESS, если вы не хотите отправлять им приветственное электронное письмо при миграции.
  • forceAliasCreation: важно только в том случае, если вы используете псевдонимы электронной почты, так как это останавливает пользователей, которым удается зарегистрироваться вcognito заменяется при переносе.

Если вы ответите этим (сохранение оставшегося оригинала rootObj удобно, но не обязательно, тогда пользователь будет перенесен с указанными атрибутами.

Если вы throw (или не можете ответить с правильной формой события), то лямбда переноса завершается неудачно, и пользователю сообщается, что он не может мигрировать, например, потому что их нет в вашей старой пользовательской базе данных, или онине предоставил правильные учетные данные.

...