【问题标题】:AWS Amplify: Forgot password function with custom UIAWS Amplify:带有自定义 UI 的忘记密码功能
【发布时间】:2018-11-07 11:37:15
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我已经在一个项目中实现了你所说的。您是否只是在寻找如何做到这一点的示例?你想知道它是如何工作的吗?你需要什么?
  • 好吧,如果你能提供一个具体的例子那就太好了!但我也很乐意知道我应该如何处理这个问题。

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


【解决方案1】:

好的 - 如果您需要更多信息,请告诉我。它与大多数忘记密码的过程略有不同,因为它们需要您提到的代码。我认为可能让您感到困惑的是用户名只是用户的电子邮件(或您指定为 Cognito 用户池的用户名的任何内容)。这不是 Cognito 用户 ID 或其他。

我使用 4 个输入来获取所需的所有信息,以及两个表单。您可以轻松地只使用一种表单。

第一个输入收集电子邮件;我把这个输入放在它自己的表格上,并附有说明。然后运行下面的 Auth.forgotPassword 方法(请提供电子邮件输入值作为用户名变量)。

AWS 将向您的用户发送验证码(如果您在 Cognito 控制台中更改消息的格式;该代码将使用“验证码”格式,至少对于 SMS 消息)。

我认为默认情况下,如果您在注册期间收集了一个电话号码并将其提供给 Cognito,则该代码应该通过 SMS 发送到用户的电话号码。如果不是,我会想象代码会发送到用户的电子邮件,尽管我不确定(我在 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));

【讨论】:

  • 非常感谢!周末我会去尝试一下
  • @Fesch 当然-很高兴为您提供帮助!如果您有任何问题,请添加评论。如果一切正常,请接受答案。
  • 太棒了,就像一个魅力!仅供参考,我只使用没有电话号码的电子邮件,用户最终会收到一封带有代码的电子邮件,而无需更改任何默认的 Cognito 设置。
  • 没关系....在使用adminCreateUser 以编程方式创建用户时,我必须将属性email_verified 发送为true。一旦我这样做了,忘记密码就开始工作了。这很奇怪,因为您可以在不验证电子邮件或电话的情况下创建用户,如果是这种情况,forgotPassword 将永远无法工作。要让 forgotPassword 工作,用户必须将 verified_emailverified_phone_number 设置为 true
  • @AnBisw,非常感谢,将 email_verified 设置为 true 也适用于我。
猜你喜欢
  • 1970-01-01
  • 2013-12-09
  • 2011-10-19
  • 2011-09-28
  • 1970-01-01
  • 2017-07-06
  • 2012-02-22
  • 1970-01-01
  • 2013-10-12
相关资源
最近更新 更多