reactjs Amplify Cognito Auth,我可以在自己的页面上验证忘记的密码吗?

brtdzjyr  于 2023-03-12  发布在  React
关注(0)|答案(3)|浏览(132)

我正在使用Amplify并为我的应用创建忘记密码之旅。我正在使用此功能:

import { Auth } from 'aws-amplify';

// Send confirmation code to user's email
Auth.forgotPassword(username)
    .then(data => console.log(data))
    .catch(err => console.log(err));

// Collect confirmation code and new password, then
Auth.forgotPasswordSubmit(username, code, new_password)
    .then(data => console.log(data))
    .catch(err => console.log(err));

如此处文档中所述
我想实现的是一个3页的旅程。
1.输入电子邮件地址
1.输入代码(并在进入下一页之前对其进行验证)
1.输入新密码
我遇到的问题是,提供的forgotPasswordSubmit函数接受所有3个参数,此时,我只想发送2个(电子邮件和代码)。
我的计划是发送电子邮件,代码,和一个空字符串的密码,然后检查返回的错误,看看是否有一个有关的代码是不正确的,但我只得到一个错误的密码无效。
有没有一种方法,我可以得到放大发送回所有的错误一次(在这种情况下,密码是无效的,但也是代码不正确),或者有没有一个更好的方式做到这一点?
我已经寻找了很长时间的答案,然后才问这里,所以任何帮助将不胜感激。

knpiaxh1

knpiaxh11#

我相信你只能分两个阶段来做。

import { Auth } from 'aws-amplify';

// Send confirmation code to user's email
Auth.forgotPassword(username)
  .then((data) => console.log(data))
  .catch((err) => console.log(err));

// Collect confirmation code and new password, then
Auth.forgotPasswordSubmit(username, code, new_password)
  .then((data) => console.log(data))
  .catch((err) => console.log(err));
0mkxixxg

0mkxixxg2#

我也遇到了同样的问题,在我们的网站上,forgotPassword的流程是这样的:
请求验证码-〉验证码-〉输入新密码
但是使用AWS放大方法,我只能一起做第2步和第3步。
希望能有办法解决这个问题。

zf9nrax1

zf9nrax13#

我想出了一个解决这个问题的办法。它肯定不是理想的,但它的工作!
1.尝试使用简短的无效密码forgotPasswordSubmit。
1.检查错误消息是否与无效代码有关

submitVerificationCode() {
  try {
  
    await Auth.forgotPasswordSubmit(
      username,
      confirmationCodes.join(""),
      "1111"
    );
  } catch (error) {
    if (
      error.message ===
      "Invalid verification code provided, please try again."
    ) {
      // Ask valid code again
    } else {
      // If the error message is not Invalid verification code error
      // then move to the next step: get a new password from the user
    }
  }
}

相关问题