AWS Amplify:使用自定义UI忘记密码功能

时间:2018-05-28 21:50:50

标签: reactjs amazon-web-services aws-cognito aws-amplify

我正在尝试实施包含“忘记密码?”的登录页面按钮打开一个表单,然后允许用户提交一个电子邮件,同时是用户名,如果该条目存在于Cognito中,则应启动重置密码进程。

到目前为止,我遇到的一个问题是,我不确定如何从Cognito实际获取相应的用户名,因为所有电子邮件登录似乎都被分配了唯一的哈希值,并且不会以纯文本形式存储在Cognito中。

I had a look at the code below line 1000 here in the docs但这似乎也假设您拥有相应的用户名和其他属性。

(注册应该只能由管理员进行,目前只需通过AWS控制台)。

关于如何实施这一点的任何想法?谢谢!

1 个答案:

答案 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));