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

React中通过Google Token向Cognito用户池添加用户失败及自定义实现需求

解决Cognito自定义Google登录后用户池不创建用户的问题

问题根源

直接调用Auth.federatedSignIn()传入Google Token的默认行为是仅完成联邦身份池认证,不会触发Cognito用户池的用户创建流程。只有通过用户池的联合身份提供商认证流程,才会自动在用户池中创建对应用户。

步骤1:确认Cognito用户池的Google身份提供商配置

  • 登录AWS控制台进入Cognito用户池,确认已添加Google作为身份提供商:
    • 配置正确的Google Client ID、Client Secret
    • 回调URL包含你的应用redirectSignIn地址(比如https://your-app-domain/login)
  • 进入用户池的App client settings:
    • 勾选Google作为允许的身份提供商
    • 确认OAuth 2.0的Allowed OAuth Flows勾选了Authorization code grant,Allowed OAuth Scopes包含email、openid、profile
  • 检查Attribute mapping:确保Google的属性(如email、name)已映射到用户池的对应属性(如email、name)

步骤2:修正Amplify配置

移除冗余配置项,聚焦用户池的联合登录配置:

Amplify.configure({
  Auth: {
    region: 'us-east-1',
    userPoolId: ENV.COGNITO_USER_POOL_ID,
    userPoolWebClientId: ENV.COGNITO_CLIENT_ID,
    oauth: {
      domain: ENV.COGNITO_DOMAIN,
      scope: ['email', 'openid', 'profile'],
      redirectSignIn: `${window.location.origin}/login`,
      redirectSignOut: `${window.location.origin}/login`,
      responseType: 'code',
      providers: {
        google: {
          client_id: 'YOUR_GOOGLE_CLIENT_ID' // 你的Google OAuth客户端ID
        }
      }
    }
  }
});

注意:无需设置federationTarget为Google,默认用户池优先;如果不需要直接使用联邦身份池,可暂时移除identityPoolId配置。

步骤3:正确的自定义Google登录实现

通过Google SDK获取id_token后,调用Amplify的Auth.signIn()方法触发用户池联合认证,自动创建用户:

import { Auth } from 'aws-amplify';

// 假设已通过Google登录SDK获取到有效的Google id_token
async function signInWithGoogle() {
  try {
    // 调用Auth.signIn,指定provider为Google并传入id_token
    const cognitoUser = await Auth.signIn({
      provider: 'Google',
      token: 'YOUR_GOOGLE_ID_TOKEN' // 替换为实际获取的Google id_token
    });

    // 用户池已自动创建对应用户,获取Cognito Token
    const idToken = cognitoUser.signInUserSession.idToken.jwtToken;
    const accessToken = cognitoUser.signInUserSession.accessToken.jwtToken;
    
    console.log('Cognito用户创建成功:', cognitoUser);
    console.log('Cognito ID Token:', idToken);
  } catch (error) {
    console.error('登录失败:', error);
  }
}

错误排查注意事项

  • 确保使用的是Google的id_token而非access_token,Cognito需要用id_token来验证用户身份
  • 解析Google的id_token,确认包含email、name等必填属性,且签名有效
  • 之前使用authenticateUser方法错误,该方法仅适用于用户名密码登录,不支持第三方Token认证
  • 检查Cognito用户池的MFA设置,如果强制启用MFA,需确保用户池配置允许联合登录用户跳过初始MFA(或完成MFA流程)

内容的提问来源于stack exchange,提问作者irfan önk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:05:37