我有简单的用例。我可以在 AWS Cognito 中手动创建用户。创建用户时,我手动输入 emailId(例如
[email protected]
)并选中 Mark email address as verified
复选框。创建用户后,确认状态将为强制更改密码。
我可以使用 HostedUI 更改密码。我打开 HostedUI 并单击
**Forgot password**
链接,HostedUI 要求我输入用户名,我输入后它会向其他 emailId 发送电子邮件(例如 m****@y****.com (我不知道这个Id从哪里来))。
我可以确认其他emailId是不是用户注册的emailId。
问: 为什么 AWS Cognito 向未注册的 emailId 发送电子邮件,并从哪里提取未注册的 emailId?
注意: 这都是手动过程。另外,我确保注册的 emailId (
[email protected]
) 也已在简单电子邮件服务的已验证电子邮件列表中注册
更新:
我可以确认,无论如何,对于所有使用强制更改密码的用户,它只会向一个未注册的 emailId 发送电子邮件。
当用户处于 FORCE_CHANGE_PASSWORD 状态时,无法根据 AWS re:Post Knowledge Center:
执行忘记密码流程用户未处于 CONFIRMED 状态
管理员创建的用户默认处于 FORCE_CHANGE_PASSWORD 状态,直到他们使用提供的密码登录。然后,系统会提示用户更改密码。
如果用户状态为FORCE_CHANGE_PASSWORD,则无法使用ForgotPassword API调用,并且不会发送验证码。
为避免用户枚举,启用
PreventUserExistenceErrors
时,Cognito 应答会模拟将电子邮件/消息发送到虚构 地址/号码,如 Cognito 开发人员指南中所述:
忘记密码
当用户未找到、被停用或没有经过验证的传输机制来恢复其密码时,Amazon Cognito 将返回 CodeDeliveryDetails 以及用户的模拟传输介质。
在用户池客户端中禁用
PreventUserExistenceErrors
将显示真正的错误消息:{"__type":"NotAuthorizedException","message":"User password cannot be reset in the current state."}
。