我使用React javascript框架为小型企业的网站创建CMS登录。显然,随机的人不能只是注册自己的详细信息,所以目前,我正在尝试在cognito控制台中手动创建用户(目前最多为5个)。我已经建立了大多数身份验证工作流程(仅使用Amplify的Auth库),并具有INITIAL强制密码重置,强制MFA TOTP身份验证以及登录时成功访问CMS。但是,尽管我尽了最大努力,但“忘记密码”功能仍然无法正常工作,我相信我已经将其范围缩小到了可识别的范围。
尝试使用用户池的所有组合和已创建的用户来使它正常工作的简短操作,在通过cognito控制台创建用户时,我提供了以下内容-
1.用户名(必须是电子邮件)
2.临时密码
3.没有电话或电话验证
4.电子邮件和勾选电子邮件验证
对于用户池条件,以下是当前的工作设置(减去忘记的密码功能)
1.登录所需的电子邮件地址
2.给出标准属性的姓名,姓氏,电话号码
3.需要MFA
4.第二个因素是基于时间的一次性密码
5.选择电子邮件作为要验证的属性(我相信这是有争议的,因为在创建用户时手动完成此操作)
6.没有提供,必需或必需的SMS角色
7.我已经使用SNS验证了电子邮件地址,并将其输入到FROM和REPLY-TO字段中以进行电子邮件自定义,并在这些自定义字段下方选择了使用Amazon SES的方式。
这是我的身份验证工作流的入口,确定用户在工作流中的位置并采取相应的行动。
await Auth.signIn(email, password)
.then(user => {
setFetching(false);
switch (user.challengeName) {
case "NEW_PASSWORD_REQUIRED":
switchComponent("Verify", user);
break;
case "SMS_MFA":
case "SOFTWARE_TOKEN_MFA":
switchComponent("ConfirmSignIn", user);
break;
case "MFA_SETUP":
switchComponent("MFASetup", user);
break;
default:
history.push({ pathname: "/" });
break;
}
})
大多数情况下,一切都会正常进行。 MFA工作流显示了一个漂亮的QR码,供用户使用并使用其选择的身份验证器进行确认,NEW_PASSWORD_REQUIRED通过以下方式提交-
const handleSubmit = async event => {
event.preventDefault();
if (noErrors()) {
setFetching(true);
await Auth.completeNewPassword(inputs.user, inputs.newPassword, {
email: inputs.email,
phone_number: inputs.phoneNumber,
given_name: inputs.givenName,
family_name: inputs.familyName
})
.then(() => {
setFetching(false);
switchComponent("MFASetup", inputs.user);
})
.catch(err => onShowDialog(err.message));
setFetching(false);
}
};
据我所知,这里没有什么异常之处。但是,即使在从Cognito控制台成功通过REQUIRE_PASSWORD_RESET身份验证之后,任何尝试初始化被遗忘的密码流的尝试都将显示“无法为用户重置密码,因为他们没有注册/验证的电子邮件或电话号码”,尽管启用了通过cognito控制台创建用户时,“验证电子邮件”。
通过使用aws命令行,我可以强制进行验证,但是,当在创建用户时启用此功能应生效时,这对我来说真是太不直观了。我的智慧到此为止,我有客户在等待该软件。在这种情况下,任何帮助将不胜感激。对于这个问题中的任何多余内容,我深表歉意,只是想确保我第一次覆盖所有内容。问候。