我需要重置一些用户的密码,但是not发送忘记密码的电子邮件。只需重置密码,以便他们下次登录时我可以显示一条消息,要求他们请求重置密码。深入研究我需要的最基本的东西:在不通知用户的情况下,我需要让他们进入一个RESET_REQUIRED
状态,以便让用户在前端返回一个PasswordResetRequiredException
.
我原本以为AdminSetUserPassword
可以做到这一点,但它使用户处于一种需要通过我没有设置的用户界面更改密码的状态。我不确定是否可以采取额外的步骤——设置密码AdminSetUserPassword
然后也许采取其他一些步骤?
否则,我已经尝试了很多不同的事情AdminResetUserPassword
.
- 尝试从我在 Lambda 上运行的 Lambda 中删除任何自定义消息
CustomMessage_ForgotPassword
触发器,但这只会导致发送带有代码的通用消息。
- 尝试改变
email_verified
用户的属性false
(因为 AWS 文档声明,如果他们有经过验证的电子邮件,它将发送密码重置电子邮件),但这会使密码重置本身引发错误。
- 尝试将用户的电子邮件更改为临时(假)电子邮件,以便将电子邮件发送到那里,但用户在更改电子邮件时会收到一封电子邮件。
有没有人有这方面的经验,或者这是一个不可能的要求?
我今天正在处理这个问题,我想让你知道我最终做了什么。
有两种方法,而且只有两种方法,可以让用户进入RESET_REQUIRED
status:
- Use
AdminResetUserPassword
- 使用导入用户Cognito 导入作业 https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-using-import-tool.html(可以看出这个流程图 https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html)
正如您所确定的,选项 1 将通过电子邮件或短信发送代码,不,您无法轻易阻止它这样做。我向 AWS Support 提出了一个支持案例来询问这个问题,但他们也没有提出任何建议。最终,我想到了使用自定义发件人触发器 https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-custom-sender-triggers.html这样我就可以在该触发器中决定是否发送电子邮件/短信,但设置外部电子邮件/短信发送器非常麻烦,因此我决定不再打扰它。
在我们的例子中,我们将用户从一个用户池迁移到另一个用户池,因此导入方法最终运行得相当好。如果您只想重置现有用户池中的用户密码,也可以使用导入方法:
- 使用以下命令读取用户属性、MFA 选项等
AdminGetUser
- 将此数据存储在安全的地方
- 使用以下命令从 Cognito 池中删除用户
AdminDeleteUser
- 通过创建并运行 Cognito 导入作业来导入用户
这将成功让您的用户RESET_REQUIRED
状态,但缺点是:
- User's
sub
会改变
- 用户记住的设备将消失
- 用户的登录历史记录将消失
- 用户的MFA软件设备将消失
所以这是一个相当糟糕的解决方案,但这就是 Cognito 为我们提供的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)