You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Google登录时Cognito为何无法获取/展示Email属性?

解决Amplify Authenticator Google登录的两个问题

问题1:Google登录后Cognito Email字段为空且未验证

原因分析

Google OAuth默认可能未请求email权限,或者Cognito未正确将Google返回的email属性映射到用户池的Email字段,也未设置自动标记邮箱为已验证状态。

解决步骤

  1. 确保Google OAuth请求了email权限
    在Cognito控制台的「身份提供商」->「Google」配置中,确认「授权范围」包含email和profile。如果通过Amplify CLI配置,检查amplifyconfiguration.json里Google的scopes配置:

    "google": {
      "clientId": "YOUR_GOOGLE_CLIENT_ID",
      "scopes": ["email", "profile", "openid"],
      ...
    }
    
  2. 配置Cognito属性映射
    进入Cognito用户池->「身份提供商」->「Google」,点击「编辑属性映射」:

    • 将Google的email属性映射到Cognito用户池的Email字段
    • 勾选该映射项的「验证」选项(Google返回的邮箱均为已验证状态,Cognito会自动将Email-verified设为true)
  3. 验证属性同步结果
    重新用Google登录后,查看Cognito用户详情,确认Email字段已填充且Email-verified为true。若仍有问题,可在登录后通过Amplify API手动获取用户属性排查:

    import { Auth } from 'aws-amplify';
    
    // 登录成功后调用
    const user = await Auth.currentAuthenticatedUser();
    console.log(user.attributes.email); // 应正常输出邮箱
    

问题2:同一邮箱可通过Google和邮箱方式重复注册

原因分析

Cognito默认不会自动关联同一邮箱的社交账号与邮箱账号,需开启用户链接功能并设置唯一属性约束。

解决步骤

  1. 设置Email为唯一必填属性
    进入Cognito用户池->「属性」,将Email设为「必填」并勾选「唯一」选项。

  2. 开启社交账号与现有用户链接
    在Cognito用户池->「身份提供商」->「Google」中找到「用户链接」选项:

    • 选择「链接到现有用户」
    • 匹配属性选择Email,这样用户用Google登录时,若邮箱已存在于用户池,会自动关联到现有账号,而非创建新用户。
  3. 测试重复注册场景
    使用已通过邮箱注册的账号尝试Google登录,应直接登录到现有账号,不会生成新用户。


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 03:35:15