You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Amazon Cognito用户池控制台username显示为sub/UUID而非邮箱的解决方法

我之前也遇到过一模一样的问题,折腾了半天终于搞明白是配置和用户属性的问题,下面是我亲测有效的解决步骤:

让Cognito控制台显示邮箱作为Username的解决方案
  • 第一步:检查用户池的核心配置
    打开你的Cognito用户池控制台,切换到属性标签页:

    1. 在「用户名属性」区域,确保勾选了「邮箱」作为登录标识符;
    2. 把「用户名要求」设置为「允许用户使用他们的邮箱地址或电话号码登录」(或者直接选「仅允许邮箱地址」,根据你的业务需求)。
      这一步是核心——只有让Cognito把邮箱当作用户名的合法来源,新注册的用户才会自动将邮箱赋值给username字段。
  • 第二步:排查自定义Lambda触发器(如果有)
    如果你给用户池配置了Pre Sign-upPost Confirmation这类自定义Lambda触发器,一定要检查代码里有没有手动覆盖username字段的逻辑。
    默认情况下,用户用邮箱注册时Cognito会自动把邮箱设为username,但如果你的Lambda代码里写了类似event.response.userAttributes.username = event.request.userAttributes.sub的逻辑,就会强制把UUID格式的sub设为用户名,导致控制台显示异常。

  • 第三步:更新已注册用户的属性(针对存量用户)
    对于已经注册的老用户,控制台显示sub是因为他们的username字段没被设置为邮箱。你可以通过AWS CLI或者SDK批量更新:
    用AWS CLI的示例命令:

    aws cognito-idp admin-update-user-attributes \
      --user-pool-id 你的用户池ID \
      --username 目标用户的sub值 \
      --user-attributes Name=preferred_username,Value=用户的邮箱地址
    

    设置preferred_username为邮箱后,控制台的「用户名」列会优先显示这个值(前提是你的用户池开启了该属性)。如果需要直接替换username字段,也可以用同样的命令修改username属性,但注意这个操作不可逆。

  • 第四步:验证效果
    完成配置修改和用户属性更新后,回到用户池的「用户和组」标签页刷新页面,就能看到用户名列显示的是用户的邮箱地址了。

内容的提问来源于stack exchange,提问作者Tarreq

火山引擎 最新活动