如何将手机号与关联Google的Cognito用户池映射?解决登录报错问题
解决Google登录Cognito因必填phone属性报错的问题
这个问题我之前做Cognito集成时也踩过坑,核心矛盾就是你提到的:Google Sign-In的权限范围里压根没有phone相关权限,没办法返回用户手机号,而你的Cognito用户池又把phone_number设成了必填属性,属性映射环节自然会直接报错。
下面给你几个可行的解决思路,你可以根据业务需求选择:
思路1:调整Cognito必填属性规则
如果手机号不是注册阶段必须强制获取的,可以先把phone_number从必填属性改为可选:
- 登录AWS控制台进入目标Cognito用户池
- 切换到「属性」选项卡,在「标准属性」里把
phone_number的「是否必填」改为否 - 这样Google登录的用户就能正常创建账号了,后续可以在你的应用内引导用户补充手机号信息
思路2:用Cognito Lambda触发强制补充手机号
如果业务上必须要求用户提供手机号,可以通过Cognito的触发器流程实现:
- 编写一个Lambda函数,逻辑是检查用户属性中是否存在
phone_number,如果不存在就跳转到你的自定义页面,引导用户输入手机号 - 在Cognito用户池的「触发器」选项卡中,配置
Post Authentication或Post Confirmation触发器,关联这个Lambda函数 - 当Google用户完成首次登录后,会被自动引导到补充手机号的页面,完成后再更新Cognito用户属性
思路3:在应用前端处理属性补充
绕开Cognito的强制校验,在应用层面处理:
- 用户通过Google登录成功后,前端直接检查返回的用户信息(肯定没有手机号)
- 弹出自定义表单让用户输入手机号
- 调用Cognito的
UpdateUserAttributesAPI,将手机号更新到用户属性中
需要注意的是,无论选哪种方案,都要确保后续业务逻辑能兼容用户暂时没有手机号的场景,避免流程卡壳。
内容的提问来源于stack exchange,提问作者mipnw
相关产品推荐
相关产品推荐

