Я разрабатываю систему входа в систему, используя 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");
}
});
}