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

迁移至@aws-amplify/auth v6获取用户属性时遇身份池令牌错误

解决Amplify v6迁移后fetchUserAttributes调用返回400错误(Token is not from a supported provider)

问题背景

将React Native应用从Amplify v5.3.x迁移到v6后,调用fetchUserAttributes获取已登录用户属性时,收到400错误,提示Token is not from a supported provider of this identity pool。v5中使用Auth.currentAuthenticatedUser()可正常获取属性,v6核心代码如上。

核心原因

Amplify v6的Auth配置逻辑与v5存在差异:你的配置中包含identityPoolId,导致Amplify尝试通过身份池获取身份凭证,但身份池未正确关联当前用户池作为可信提供商,或配置格式不符合v6要求。此外,仅获取用户属性不需要依赖身份池,可先简化配置排查问题。


解决方案

步骤1:简化Auth配置(移除身份池,仅保留用户池配置)

如果仅需获取用户属性,无需身份池相关功能,直接从配置中移除identityPoolId和allowGuestAccess(fetchUserAttributes调用的是Cognito用户池API,与身份池无关):

Amplify.configure({
  Auth: {
    Cognito: {
      userPoolId: "eu-west-2_xxx",
      userPoolClientId: "xxx",
      signUpVerificationMethod: "code",
      userAttributes: {
        email: {
          required: true,
        },
        phone_number: {
          required: true,
        },
        name: {
          required: true,
        },
      },
    },
  },
});

步骤2:确保调用时机正确(等待用户登录状态就绪)

在v6中,建议通过useAuthenticator的user状态判断用户是否已完全登录,避免在登录流程未完成时调用fetchUserAttributes:

const UserProfile = () => {
  const [attributes, setAttributes] = useState<FetchUserAttributesOutput>();
  const { user } = useAuthenticator(); // 获取登录用户状态

  useEffect(() => {
    if (!user) return; // 用户未登录时跳过执行
    fetchUserAttributes().then(setAttributes).catch(console.error);
  }, [user]); // 依赖user状态,登录状态变化时重新获取

  // 其余代码保持不变
};

步骤3:若需身份池,修复身份池关联配置

如果应用确实需要使用身份池(比如访问其他AWS服务),需完成以下配置:

  1. AWS控制台配置:在Cognito身份池的「认证提供商」列表中,添加当前用户池,确保用户池ID和应用客户端ID与代码配置一致。
  2. Amplify v6配置补充:明确指定身份池的认证提供商:
Amplify.configure({
  Auth: {
    Cognito: {
      userPoolId: "eu-west-2_xxx",
      userPoolClientId: "xxx",
      identityPoolId: "eu-west-2:xxx",
      authenticationProviders: {
        cognito: [
          {
            userPoolId: "eu-west-2_xxx",
            clientId: "xxx",
          },
        ],
      },
      signUpVerificationMethod: "code",
      userAttributes: {
        // 保持原有属性配置
      },
      allowGuestAccess: false,
    },
  },
});

额外检查点

  • 确认用户池的应用客户端已启用ALLOW_USER_SRP_AUTH等必要的认证流程。
  • 检查身份池的「未认证身份访问」是否已关闭(与配置中的allowGuestAccess: false保持一致)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:47:36