【发布时间】: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