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

AWS Amplify Apple联合登录成功后Cognito用户池无用户记录怎么办

问题根因与排查方案

1. 核心概念混淆:Cognito用户池 vs 联合身份池

你当前调用AWSMobileClient.federatedSignIn默认对接的是Cognito联合身份池(Identity Pool),该组件的作用是为第三方登录用户颁发访问AWS服务的临时凭证,用户信息不会自动同步到Cognito用户池(User Pool),所以你在用户池的用户列表里看不到对应记录,登录成功的用户只会出现在联合身份池的「身份浏览器」列表中。
如果你的业务需要用户出现在Cognito用户池,应该走用户池的第三方身份提供商(IdP)登录流程,而非直接调用身份池的联邦登录接口。

2. 配置错误排查点

  • 提供商名称不匹配:如果你已经配置了用户池的Apple IdP,注意用户池的Apple身份提供商默认名称为Apple,你代码中写的providerName: "signInWithApple"和配置值不匹配,会导致用户池无法识别提供商,不会创建用户记录。
  • Apple IdP配置未生效:检查用户池的Apple身份提供商配置:确认已正确填写Apple团队ID、服务ID、私钥、重定向URI,且提供商状态为「已启用」。
  • Amplify配置错误:检查amplifyconfiguration.json中的Auth配置,确认已正确配置用户池参数,且用户池为默认认证源。

3. 代码优化建议

不建议直接用Escape Hatch调用AWSMobileClient的低级API,直接使用Amplify Auth封装好的Apple登录接口,自动适配你的Auth配置,避免手动传参错误:

// SwiftUI 适配示例
func handleSignInWithAppleResult(_ result: Result<ASAuthorization, Error>) async {
    do {
        guard let appleIDCredential = try result.get().credential as? ASAuthorizationAppleIDCredential,
              let identityToken = appleIDCredential.identityToken,
              let tokenString = String(data: identityToken, encoding: .utf8) else {
            return
        }
        let authResult = try await Amplify.Auth.signIn(
            with: .apple,
            idToken: tokenString,
            rawNonce: nil // 如果配置了nonce需要传入对应值
        )
        print("登录成功:\(authResult)")
    } catch {
        print("登录失败:\(error)")
    }
}

4. 验证步骤

  • 打开Cognito控制台,进入「联合身份」-「身份池」,找到你的项目对应身份池,打开「身份浏览器」,可以看到当前所有通过联邦登录的身份ID,确认你的登录用户是否在此处。
  • 开启Amplify调试日志,在App初始化时添加Amplify.Logging.logLevel = .verbose,查看登录流程的请求地址,确认是发往用户池端点(格式为https://<用户池前缀>.auth.<区域>.amazoncognito.com)还是身份池端点(格式为https://cognito-identity.<区域>.amazonaws.com)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:54:03