AWS Cognito新用户重置密码异常:CodeDeliveryDetails返回错误邮箱
问题描述
我通过AWS控制台创建了一个新用户,该用户当前处于“Force change password”状态。我希望无需输入用户名和密码即可立即触发“忘记密码”流程,因此执行了如下请求:
curl --location 'https://cognito-idp.eu-central-1.amazonaws.com/' \ --header 'X-Amz-Target: AWSCognitoIdentityProviderService.ForgotPassword' \ --header 'Content-Type: application/x-amz-json-1.1' \ --data '{ "ClientId":"aaaaaaaaabbbbbbbbcccccccdd", "Username":"brandnewuser" }'
但收到如下响应:
{ "CodeDeliveryDetails": { "AttributeName": "email", "DeliveryMedium": "EMAIL", "Destination": "t***@y***" } }
问题在于返回的(掩码)邮箱不正确,应该是类似a***@a***的地址而非t***@y***,这会困扰我们的客户。请问原因是什么?应采取哪些措施,比如向AWS提交工单?
问题处理方案
可能的原因
- 用户邮箱属性配置错误:创建用户时控制台填写的邮箱不符合预期,或者存在同名用户的残留数据(比如之前删除的用户未完全清理,导致属性混淆)
- ClientId对应错误用户池:调用API使用的ClientId属于其他用户池,查询到的是其他池内同名用户的邮箱信息
- Cognito数据缓存延迟:刚创建的用户数据未及时同步,API读取到了旧的属性缓存
- Lambda触发器修改属性:用户池配置的PreSignUp、PostConfirmation等Lambda触发器,在用户创建后自动修改了邮箱属性
排查与解决步骤
- 核对用户真实邮箱:登录AWS控制台进入目标Cognito用户池,找到
brandnewuser,查看其email属性的实际值,确认是否为预期的a***@a*** - 验证ClientId归属:确认调用API的
aaaaaaaaabbbbbbbbcccccccdd这个ClientId,是否属于创建该用户的用户池 - 触发数据同步:如果是缓存问题,可在控制台临时修改用户的某个属性(比如添加一个临时自定义属性后删除),之后重新调用ForgotPassword API测试
- 检查触发器配置:查看用户池的触发器设置,确认有没有Lambda函数在用户创建流程中修改了邮箱属性
- 提交AWS支持工单:若以上排查均未解决问题,直接提交AWS支持工单,需提供以下信息以便快速定位:
- 用户池ID和使用的ClientId
- 用户名
brandnewuser - API请求的时间戳和请求ID(可从CloudTrail日志中获取)
- 控制台显示的用户邮箱与API返回掩码邮箱的对比信息
内容的提问来源于stack exchange,提问作者brian enno
相关产品推荐
相关产品推荐

