我想在 Amazon Cognito 中恢复用户密码。
解决方法
在 Amazon Cognito 中恢复用户密码有两种方法:
- 通过经过验证的电子邮件或电话号码。
- 通过管理员提供的用户密码。
电子邮件或电话号码验证
您可以使用 ForgotPassword API 命令来恢复用户密码。ForgotPassword API 命令将恢复代码发送到经过验证的电子邮件或经过验证的电话号码。恢复代码的有效期为一小时。然后,使用 ConfirmForgotPassword API 命令输入用于重置密码的确认码。
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 AWS CLI。
AWS CLI 命令:
ForgotPassword
aws cognito-idp forgot-password --client-id 38fjsnc484p94kpqsnet7mpld0 --username jane@example.com
输出:
{
"CodeDeliveryDetails": {
"Destination": "j***@e***.com",
"DeliveryMedium": "EMAIL",
"AttributeName": "email"
}
}
ConfirmForgotPassword
aws cognito-idp confirm-forgot-password --client-id 3n4b5urk1ft4fl3mg5e62d9ado --username=diego@example.com --password PASSWORD --confirmation-code CONF_CODE
**注意:**如果您满足以下两个要求,则必须在 CLI 命令中传递 --secret-hash:
- 您的 AWS CLI 命令使用 --client-id 作为参数。
- 应用程序客户端配置了密钥。
要计算应用程序客户端的密钥哈希,请参阅[如何解决 Amazon Cognito 用户群体 API 中的“无法验证客户端
的密钥哈希”错误?](https://repost.aws/zh-Hans/knowledge-center/cognito-unable-to-verify-secret-hash)
管理员重置
**注意:**如果您不是管理员,请联系您的管理员完成以下操作。
当您调用 AdminResetUserPassword API 命令时,当前密码失效,您必须对其进行更改。如果用户在调用 API 命令后尝试登录,则该应用程序将执行以下操作:
- 重新获取 PasswordResetRequiredException。
- 通过忘记密码流程指导用户重置密码。
此外,在以下情况下,调用 API 会向用户发送一条消息,其中包含更改密码的代码:
- 用户群体已设置电话验证,并且
- 用户拥有经过验证的电话号码或电子邮件。
AWS CLI 命令:
AdminResetUserPassword
aws cognito-idp admin-reset-user-password --user-pool-id us-west-2_aaaaaaaaa --username diego@example.com
ConfirmForgotPassword
aws cognito-idp confirm-forgot-password --client-id 3n4b5urk1ft4fl3mg5e62d9ado --username diego@example.com --password PASSWORD --confirmation-code CONF_CODE
AdminSetUserPassword
作为管理员,您还可以使用 AdminSetUserPassword API 命令在用户群体中调用用户的密码。密码可以是临时的,也可以是永久的。如果是临时的,则用户状态会进入 FORCE_CHANGE_PASSWORD 状态。当您登录时,InitiateAuth/AdminInitiateAuth 响应会包含 NEW_PASSWORD_REQUIRED 质询。如果您在密码过期之前没有登录,则无法登录,必须重置密码。设置新密码后,或者如果密码是永久密码,则用户状态将设置为 CONFIRMED。
aws cognito-idp admin-set-user-password --user-pool-id us-west-2_aaaaaaaaa --username diego@example.com --password Hello@123 --permanent