我正在尝试实施包含“忘记密码?”的登录页面按钮打开一个表单,然后允许用户提交一个电子邮件,同时是用户名,如果该条目存在于Cognito中,则应启动重置密码进程。
到目前为止,我遇到的一个问题是,我不确定如何从Cognito实际获取相应的用户名,因为所有电子邮件登录似乎都被分配了唯一的哈希值,并且不会以纯文本形式存储在Cognito中。
I had a look at the code below line 1000 here in the docs但这似乎也假设您拥有相应的用户名和其他属性。
(注册应该只能由管理员进行,目前只需通过AWS控制台)。
关于如何实施这一点的任何想法?谢谢!
答案 0 :(得分:1)
好的 - 如果您需要更多信息,请与我们联系。它与大多数忘记密码进程略有不同,因为它们需要您提及的代码。我认为可能让你失望的是用户名只是用户的电子邮件(或者你指定为Cognito用户池的用户名)。这不是Cognito用户ID或其他任何内容。
我使用4个输入来获取所需的所有信息,以及两种形式。您可以轻松地只使用一种表格。
第一个输入收集电子邮件;我把这个输入放在它自己的表格上并附上说明。然后,您运行下面的Auth.forgotPassword方法(请提供电子邮件输入值作为用户名变量)。
AWS将向您的用户发送验证码(如果您在Cognito控制台中更改了邮件的格式;代码将使用“验证码”格式,至少对于SMS消息而言。)
我认为默认情况下,如果您在注册过程中收集了电话号码并将其提供给Cognito,则代码应通过短信发送到用户的电话号码。如果没有,我会想象代码会转到用户的电子邮件,虽然我不确定(我在Cognito中有用户的电话号码,而且我从未通过电子邮件获得此代码)。
您的其他三个输入应该是:代码,密码,验证密码。我在第二种形式上有这三种。用户将代码提供给代码输入表单,提供新密码并验证新密码。
您接收电子邮件(来自其他表单),代码和密码,并使用Auth.forgotPasswordSubmit方法(再次提供电子邮件输入值作为用户名,代码输入值作为代码,密码输入值作为密码)
你真的不需要从这两种方法返回的“数据”消息(我认为如果我没记错的话,它只是一个字母“成功”)。
如果用户不在系统中,Auth.forgotPassword方法将返回错误(“未找到用户”的效果)。
请找到以下相关方法(从docs复制):
import { Auth } from 'aws-amplify';
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));