AWS Cognito(SNS)为何无法发送用户属性验证消息?
排查Cognito验证短信未发送问题的步骤
1. 查看SNS消息失败的具体原因
- 登录AWS SNS控制台,进入「短信」板块,点击「已发送消息」,找到那3条失败的记录,查看状态和状态原因列,这里会直接显示失败的具体原因(比如号码未在沙盒验证、格式不符合要求、运营商拦截等)。
- 沙盒模式下,仅已验证的电话号码能接收SNS短信,务必确认目标用户的手机号已添加到SNS沙盒的「已验证电话号码」列表中,且状态为「已验证」。
2. 检查Cognito用户池的SNS集成配置
- 进入Cognito用户池控制台,查看「消息自定义」中的短信配置,确认关联的SNS服务角色具备足够权限(至少允许Cognito调用SNS的
Publish接口发送短信)。 - 检查短信签名内容,沙盒模式下签名有严格限制,避免使用特殊字符、过长内容或不符合运营商规范的签名。
3. 通过CloudTrail日志追踪请求细节
- 打开AWS CloudTrail控制台,筛选事件源为
cognito-idp.amazonaws.com和sns.amazonaws.com,定位到对应时间点的VerifyUserAttribute和Publish事件:- 确认Cognito调用SNS时传递的电话号码是否为标准E.164格式(如
+1234567890,不能包含空格、括号、短横线等); - 查看SNS的
Publish事件响应,若存在InvalidParameter、MessageRejected等错误码,可根据错误信息定位问题。
- 确认Cognito调用SNS时传递的电话号码是否为标准E.164格式(如
4. 验证代码中的参数与权限
- 检查Node.js代码中
verifyUserAttribute接口的参数:确保AttributeName准确为phone_number,传入的手机号严格符合E.164格式; - 确认代码使用的AWS凭证(credentials)所属区域与Cognito、SNS的区域一致,且具备调用
cognito-idp:VerifyUserAttribute和sns:Publish的权限。
5. 排除终端或运营商层面的问题
- 使用另一个已验证的沙盒号码测试短信发送,排查目标号码是否存在运营商屏蔽、手机短信拦截等问题;
- 检查手机的垃圾短信过滤设置,确认验证码短信未被归类到垃圾短信文件夹。
内容的提问来源于stack exchange,提问作者Damon
相关产品推荐
相关产品推荐

