Невозможно сбросить пароль для пользователей, созданных в консоли Cognito - PullRequest
0 голосов
/ 19 апреля 2019

Я создаю логин для CMS на веб-сайте для малого бизнеса с использованием инфраструктуры React javascript. Очевидно, что случайные люди не могут просто зарегистрировать свои собственные данные, поэтому в настоящее время я пытаюсь вручную создать пользователей (максимум 5 в настоящее время) в консоли Cognito. Я установил большую часть рабочего процесса аутентификации (используя только библиотеку Auth от Amplify) с начальным принудительным сбросом пароля, принудительной аутентификацией MFA TOTP и успешным доступом к CMS при входе в систему. Однако функция «Забытый пароль», несмотря на все мои усилия, просто отказывается работать, и я считаю, что я сузил его до самого Cognito.

Если не попробовать каждую чертову комбинацию пула пользователей и созданного пользователя, чтобы заставить это работать, я предоставляю следующее при создании пользователя из консоли cognito:

1. Имя пользователя (должен быть адрес электронной почты)
2. Временный пароль
3. Нет телефона или проверка телефона
4. Подтверждение адреса электронной почты и галочки

Для условий пула пользователей ниже приведены текущие рабочие настройки (за исключением функции забытого пароля)

1. Адрес электронной почты, необходимый для входа
2. Стандартными атрибутами являются имя, фамилия, номер телефона
3. MFA требуется
4. Второй фактор - одноразовый пароль, основанный на времени
5. Электронная почта выбрана в качестве атрибута для проверки (который я считаю спорным, поскольку это делается вручную при создании пользователя)
6. Роль SMS не предусмотрена, не требуется или не требуется
7. Я подтвердил адрес электронной почты с помощью SNS и ввел его в поля FROM и REPLY-TO для настройки электронной почты и выбрал использование Amazon SES под этими полями настройки.

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

await Auth.signIn(email, password)
  .then(user => {
    setFetching(false);
    switch (user.challengeName) {
      case "NEW_PASSWORD_REQUIRED":
        switchComponent("Verify", user);
        break;
      case "SMS_MFA":
      case "SOFTWARE_TOKEN_MFA":
        switchComponent("ConfirmSignIn", user);
        break;
      case "MFA_SETUP":
        switchComponent("MFASetup", user);
        break;
      default:
        history.push({ pathname: "/" });
        break;
      }
   })

В большинстве случаев все работает как надо. Рабочий процесс MFA отображает удобный QR-код, который пользователь может использовать и подтвердить с помощью своего выбранного Аутентификатора. NEW_PASSWORD_REQUIRED отправляется с помощью следующего: *

const handleSubmit = async event => {
  event.preventDefault();
  if (noErrors()) {
    setFetching(true);
    await Auth.completeNewPassword(inputs.user, inputs.newPassword, {
      email: inputs.email,
      phone_number: inputs.phoneNumber,
      given_name: inputs.givenName,
      family_name: inputs.familyName
    })
      .then(() => {
        setFetching(false);
        switchComponent("MFASetup", inputs.user);
      })
      .catch(err => onShowDialog(err.message));
    setFetching(false);
  }
};

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

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

...