AWS Amplify: как лучше всего автоматически регистрировать пользователя после подтверждения регистрации?

#amazon-web-services #authentication #amazon-cognito #aws-amplify #amplifyjs

#amazon-web-services #аутентификация #amazon-cognito #aws-amplify #amplifyjs

Вопрос:

Обзор:

После того, как пользователь получает Проверочный код, пользователь вводит Проверочный код, и Account Status становится CONFIRMED . Теперь, когда процесс регистрации завершен, я хочу автоматически авторизовать пользователя после. Кажется неэффективным и избыточным перенаправлять пользователя на страницу входа, чтобы пользователь вводил свою информацию и входил в систему.

Возможные варианты:

  1. Используйте email и password в процессе регистрации, а затем отправьте signIn действие для входа пользователя.
  2. Найдите способ комбинированного метода для обоих confirmSignUp и signIn , который был бы чем-то вроде confirmSignUpAndSignIn (если метод существует). Я просмотрел документы AWS и репозиторий Issues Amplify-js Github, но обнаружил, что у других была аналогичная дилемма без видимого решения.
  3. Используйте AWS Amplify Hub (прослушиватель аутентификации), но при подтверждении регистрации пользователем не происходит никаких событий. Имело бы смысл, confirmSignUp чтобы вызвать событие, но этого не происходит. (Смотрите ниже)

Прослушиватель AWS Hub:

Я использую AWS Amplify Hub (прослушиватель аутентификации), и единственными событиями, которые генерируются, являются следующие из документов:

 case 'signIn':
    logger.error('user signed in'); //[ERROR] My-Logger - user signed in
    break;
case 'signUp':
    logger.error('user signed up');
    break;
case 'signOut':
    logger.error('user signed out');
    break;
case 'signIn_failure':
    logger.error('user sign in failed');
    break;
case 'configured':
    logger.error('the Auth module is configured');
  

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

1. Вы просмотрели код компонента ConfirmSignUp ? В более поздних версиях пользователь автоматически входит в систему после подтверждения — найдите confirm()…

2. @LukasRossa Это работает для их библиотеки компонентов пользовательского интерфейса, их простые вызовы не позволяют автоматически регистрировать пользователя.

Ответ №1:

У меня была такая же проблема, после просмотра документов Amplify API и исходного кода я обнаружил, что простое решение является лучшим:

 try {
  // try to confirm the code
  await Auth.confirmSignUp(formValues.email, formValues.confirmationCode);
  // If successful, sign user in
  await Auth.signIn({
    username: formValues.email,
    password: formValues.password,
  });
} catch (error) {
  console.log('error', error);
}
  

Ответ №2:

С помощью aws-amplify@4.3.29 этого можно добиться, включив autoSignIn функцию и прослушивая события с помощью концентратора, подробности в этом выпуске github

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

1. НАКОНЕЦ-ТО!!! Ожидание закончилось

Ответ №3:

Начиная с Amplify JS API версии 4.3.29, теперь это возможно. Просто включите autoSignIn атрибут в метод регистрации.

  Auth.signUp({
  username: 'xxxxxx',
  password: '*********,
  attributes: {
    email: 'xxxxxxxxxx'
  },
  autoSignIn: {
    enabled: true
  }
})
  

Решения для крайних случаев, такие как MFA, можно увидеть в ранее упомянутом выпуске GitHub