AWS-Amplify MFA Ошибка «Пользователь не авторизован» - PullRequest
0 голосов
/ 29 октября 2018

Я разрабатываю систему входа в систему, используя ReactJs и AWS-Cognito с Amplify. В настоящее время у меня есть страница входа в систему, где пользователь будет вводить там имя пользователя и пароль, а затем страница проверит, активировал ли пользователь MFA. Если MFA не включен, для MFA будет установлено значение TOTP, а затем пользователю будет предложено ввести TOTP.

В коде, который я сейчас установил, для предпочтительного MFA установлено значение SOFTWARE_TOKEN_MFA, но как только я пытаюсь снова войти в систему после его установки, выдается сообщение об ошибке, что пользователь не аутентифицирован. Пользователь аутентифицируется с помощью кода подтверждения, отправляемого по электронной почте, и это делается при регистрации.

Кажется, сбой при "const userObject = await Auth.signIn (электронная почта, пароль);" линия. Работает до тех пор, пока не будет установлен нужный MFA. Требуется ли для TOTP подтверждение номера мобильного телефона или проблема с моим кодом?

Любая помощь будет высоко ценится!

handleSubmit = async event => {
event.preventDefault();

try {
  const { email, password } = this.state;

  const userObject = await Auth.signIn(email, password);

  let user = await Auth.currentAuthenticatedUser();
  console.log("user: " + JSON.stringify(user));

  let obj = await Auth.getPreferredMFA(userObject);

  if (obj === "NOMFA") {
    this.state.totp = await Auth.setupTOTP(userObject);
    console.log("totp: " + this.state.totp);

    this.state.authCode = prompt(
      "\nPlease input the TOTP code for 1st time.\n",
      ""
    );

   Auth.verifyTotpToken(userObject, this.state.authCode)
  .then(() => {
    Auth.setPreferredMFA(userObject, "TOTP");
    this.props.history.push("/home");
    this.props.userHasAuthenticated(true);
  })
  .catch(e => {
    // Token is not verified
    this.props.userHasAuthenticated(false);
    alert("TOTP is incorrect \nPlease re-enter Login Details");
  });
  } else {
    this.state.authCode = prompt("\nPlease input the TOTP code.\n", "");

    console.log(this.state.authCode);

    Auth.confirmSignIn(
      userObject,
      this.state.authCode,
      "SOFTWARE_TOKEN_MFA"
    )
      .then(() => {
        this.props.userHasAuthenticated(true);
      })
      .catch(e => {
          alert("TOTP is incorrect \n Please re-enter Login Details");
        }
      });
  }
...