使用 Cognito 忘记密码无法通过电子邮件接收任何代码

Ton*_*ent 7 amazon-cognito

我是第一次使用 AWS Cognito Auth。

  1. 创建了一个用户池(成功)
  2. 使用 AdminCreateUser API 在池中创建用户(成功)
  3. 尝试使用 AdminInitiateAuth API 和 AdminRespondToAuthChallenge API 来获取访问令牌(成功)
  4. 尝试使用 ForgotPassword API 重置密码,但它根本不起作用。

这是我在 JAVA 中 ForgotPassword 的代码:

ForgotPasswordRequest request = ForgotPasswordRequest.builder()
  .clientId(GetUserPoolClientId(companyCode))
  .username(userEmail)
  .build();
ForgotPasswordResponse response = cognitoClient.forgotPassword(request);
Run Code Online (Sandbox Code Playgroud)

回复给我 ***@gmail.com,但我没有收到任何电子邮件。

小智 18

我已经为此苦苦挣扎了几天,但终于找到了答案。似乎我们无法向没有验证电子邮件的用户发送 forgotPassword 电子邮件,当您使用 AdminCreateUser API 时可能会发生这种情况,因为用户只收到用于临时密码的电子邮件,而不用于电子邮件验证。

必须验证电话或电子邮件才能自动确认用户并启用从忘记密码中恢复的功能。

https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-email-phone-verification.html?icmpid=docs_cognito_console

解决方案:

当您调用 AdminCreateUser 方法时,您实际上可以将电子邮件验证标志作为另一个属性传递:

{
  //AminCreateUser request ...
  "UserAttributes": [
    // other user attributes ...
    { 
     "Name": "email_verified",
     "Value": "true"
    }
  ],
}
Run Code Online (Sandbox Code Playgroud)

还应该可以使用 AdminUpdateUserAttributes API 更新 email_verified 状态。

  • 我面临同样的问题,但我已经将用户标记为“email_verified”,如下所示。但不幸的是,如果用户具有 UserStatus:“FORCE_CHANGE_PASSWORD”,它仍然不起作用。(即从未实际尝试过收到的临时密码,因为它最终出现在垃圾邮件中,然后在 7 天后过期)。还没找到解决办法... (3认同)
  • 请注意,如果设置“email_verified”属性,您还需要设置“email”属性。https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html (2认同)