【问题标题】:AWS Cognito - Admin Reset User Password WITHOUT Sending EmailAWS Cognito - 管理员无需发送电子邮件即可重置用户密码
【发布时间】:2021-05-19 21:41:23
【问题描述】:

我需要重置一些用户的密码,但不需要发送忘记密码的电子邮件。只需重置密码,以便他们下次登录时,我可以显示一条消息,提示他们需要请求重置密码。深入了解我需要的最基本的东西:在不通知用户的情况下,我需要让他们进入RESET_REQUIRED 状态,以便让用户在前端返回PasswordResetRequiredException

我最初认为AdminSetUserPassword 可以解决这个问题,但它使用户处于需要通过我没有设置的某些 UI 更改密码的状态。我不确定是否可以采取额外的步骤 - 使用 AdminSetUserPassword 设置密码,然后可能会采取其他一些步骤?

否则,我在AdminResetUserPassword 周围尝试了很多不同的东西。

  • 尝试从我拥有的在 CustomMessage_ForgotPassword 触发器上运行的 Lambda 中删除任何自定义消息,但这只会导致带有代码的通用消息发送。
  • 尝试将用户的 email_verified 属性更改为 false(因为 AWS 文档声明如果他们有经过验证的电子邮件,它将发送密码重置电子邮件),但这会使密码重置本身引发错误。
  • 尝试将用户的电子邮件更改为临时(假)电子邮件,以便将电子邮件发送到那里,但用户在更改电子邮件时会收到一封电子邮件。

有没有人有这方面的经验,或者这是一个不可能的要求?

【问题讨论】:

    标签: amazon-web-services amazon-cognito


    【解决方案1】:

    我今天正在处理这个问题,并想告诉你我最终做了什么。

    有两种方法,而且只有两种方法可以让用户进入RESET_REQUIRED 状态:

    1. 使用AdminResetUserPassword
    2. 使用Cognito import job 导入用户(如this flow chart 所示)

    如您所见,选项 1 将通过电子邮件或短信发送代码,不,您无法轻易阻止它这样做。我向 AWS Support 提出了一个支持案例来询问这个问题,他们也没有提出任何建议。最终,我考虑使用Custom Sender Triggers,以便我可以在该触发器中决定是否发送电子邮件/短信,但设置外部电子邮件/短信发件人太麻烦了,我决定不打扰它。

    在我们的案例中,我们将用户从一个用户池迁移到另一个用户池,因此导入方法最终运行良好。如果您只想在现有用户池中重置用户密码,也可以使用导入方法:

    1. 使用AdminGetUser读取用户属性、MFA选项等
    2. 将此数据存储在安全的地方
    3. 使用AdminDeleteUser 从 Cognito 池中删除用户
    4. 通过创建和运行 Cognito 导入作业来导入用户

    这将成功让您的用户进入RESET_REQUIRED 状态,但缺点是:

    • 用户的sub 会改变
    • 用户记住的设备将消失
    • 用户的登录历史将消失
    • 用户的 MFA 软件设备将消失

    所以这是一个非常糟糕的解决方案,但它是 Cognito 为我们提供的。

    【讨论】:

      猜你喜欢
      • 2019-10-05
      • 1970-01-01
      • 2010-11-05
      • 1970-01-01
      • 2015-04-24
      • 2018-05-03
      • 2011-04-16
      • 2019-11-27
      • 2017-07-22
      相关资源
      最近更新 更多