【问题标题】:Amazon Cognito newPasswordRequired await for page loadAmazon Cognito newPasswordRequired 等待页面加载
【发布时间】:2018-02-23 05:13:35
【问题描述】:

我正在我的 Web 应用程序中实施 Amazon Cognito 用户池身份验证,我遇到了这个问题 - 如何将 newPasswordRequired 回调上的用户重定向到“/new-password”并等待输入?

换句话说,我的预期流程是用户使用临时密码登录(这里我触发 cognitoUser.authenitcateUser),之后我将用户重定向到“/new-password”路由并且用户看到新密码表单(newPasswordRequired 回调在这里触发)。

现在的问题是 SDK 希望我在 newPassword 回调中传递密码,但我还不知道它们(因为用户会将其输入新密码形式)。

代码:

async login(values) {
const details = {
  Username: values.username,
  Password: values.password,
};

const authDetails = new AuthenticationDetails(details);
const userData = {
  Username: details.Username,
  Pool: poolData,
};

const cognitoUser = await new CognitoUser(userData);
await cognitoUser.authenticateUser(authDetails, {
  onSuccess: (result) => {
    console.log(userData);
    axios.defaults.headers.common.Authorization = result.getIdToken().getJwtToken();
    browserHistory.push('/entities');
  },
  onFailure: (error) => {
    console.log(userData);
    throw new Error(error);
  },
  newPasswordRequired: () => {
    browserHistory.push('/new-password');
    console.log(cognitoUser);
    console.log(cognitoUser.getAuthenticationFlowType(), 'YOU NEED TO CHANGE PASSWORD');
    const userData = {
      Username: cognitoUser.username,
      Pool: poolData,
    };
    cognitoUser.completeNewPasswordChallenge(
      values.newPassword,
      {},
      {
        onSuccess: (user) => {
          console.log('success', user);
        },
        onFailure: (error) => {
          console.log(error);
        },
      },
    );
  },
});

}

我尝试的另一件事是创建单独的方法,该方法负责调用 cognitoUser.completeNewPasswordChallenge 但随后用户池认为我未通过身份验证。

我的反应组件如下所示:

<form onSubmit={this.props.handleSubmit(AWSApi.login.bind(this))}></form>

【问题讨论】:

  • 嘿金塔拉斯,你找到解决办法了吗?
  • 我做到了。在 newPasswordRequired 回调中,我将用户重定向到 /new-password 路由。该路由显示 ForgotPasswordForm 组件,该组件 onSubmit 正在调用另一个方法,我在其中处理更改密码的逻辑。解决方案很脏,但我们决定暂时使用这个解决方案。

标签: javascript reactjs ecmascript-6 amazon-cognito aws-cognito


【解决方案1】:

您需要cognitoUser.Session 才能在重定向后调用cognitoUser.completeNewPasswordChallenge。您可以将cognitoUser.Session 保留在本地存储中或在重定向之前设置为获取参数(yoururl?session=cognitoUser.Session)。然后在新页面中,您可以创建新的cognitoUser 并设置旧的响应会话。

例如:

var userPool = new AmazonCognitoIdentity.CognitoUserPool(POOL_DATA);
var userData = {
    Username: username,
    Pool: userPool
};

var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
cognitoUser.Session = <your saved session>
cognitoUser.completeNewPasswordChallenge(....

【讨论】:

    猜你喜欢
    • 2017-09-13
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 2020-01-04
    • 2017-03-27
    • 1970-01-01
    相关资源
    最近更新 更多