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

React Native Expo集成Google/Apple SSO至AWS Cognito/Amplify遇阻求助

React Native Expo + AWS Cognito/Amplify: 修复SSO按钮无响应问题及Apple SSO集成指南

一、Google SSO的Cognito控制台特定配置要求

  • 用户池应用客户端关联:
    必须在Cognito用户池的「应用客户端」标签下,将Google身份提供商关联到当前使用的应用客户端并启用。
  • Google授权范围配置:
    Google开发者控制台中,授权范围必须包含openid、email、profile,否则Cognito无法获取用户基础信息完成认证。
  • 回调URL一致性:
    Google开发者控制台、Cognito身份提供商配置中的回调URL必须完全匹配,格式需对应Expo项目的自定义scheme(例如your-app-scheme://callback)。
  • 身份池角色映射:
    若需通过身份池获取AWS资源权限,需确保身份池已将用户池作为认证提供商,并配置Google联合登录的角色映射规则。

二、React Native中使用toFederatedSignIn的额外步骤

  1. 版本兼容性修正:
    你的aws-amplify为6.3.6,但@aws-amplify/ui-react-native仅为2.2.2,两者版本严重不兼容(Amplify 6.x对应UI库需为6.x版本)。执行以下命令升级:
npm install @aws-amplify/ui-react-native@^6.0.0

同时移除冗余的aws-amplify-react-native包(已被@aws-amplify/react-native替代)。

  1. 配置Expo自定义Scheme:
    在app.json中添加scheme,用于SSO回调跳转:
{
  "expo": {
    "scheme": "your-app-scheme", // 例如"myawscognitoapp"
    // 其他配置...
  }
}

该scheme必须与Google/Cognito中的回调URL保持一致。

  1. 替换Authenticator Provider:
    Amplify 6.x的UI库需使用AmplifyProvider而非Authenticator.Provider,修改App.js:
import { AmplifyProvider } from '@aws-amplify/ui-react-native';
import { Amplify } from 'aws-amplify';
import amplifyconfig from '../amplifyconfiguration.json';

Amplify.configure(amplifyconfig);

export default function App() {
  return (
    <AmplifyProvider>
      <YourMainComponent />
    </AmplifyProvider>
  );
}
  1. 验证Web Browser依赖:
    确保@aws-amplify/rtn-web-browser已正确安装,Expo项目无需额外插件,但需保证设备有网络权限。

三、有效调试方法

  1. 开启Amplify调试日志:
    在Amplify.configure前添加日志级别设置,获取认证流程的详细日志:
import { Amplify, Logger } from 'aws-amplify';
Logger.LOG_LEVEL = 'DEBUG';
Amplify.configure(amplifyconfig);
  1. 检查useAuthenticator返回值:
    在组件中打印完整的认证状态,确认toFederatedSignIn是否为有效函数:
const auth = useAuthenticator();
console.log('Authenticator state:', auth);
  1. 测试基础认证流程:
    先实现简单的用户名密码登录,验证Amplify与Cognito的连接是否正常,排除核心配置错误。

  2. 清除Expo缓存:
    运行expo start -c清除缓存,避免旧配置残留导致的异常。

四、Apple SSO集成指南

1. Cognito控制台配置

  • 在Apple开发者平台创建Service ID,启用「Sign in with Apple」,配置回调URL(需与Cognito及Expo scheme一致)。
  • 生成Apple私钥(.p8文件),记录密钥ID和团队ID。
  • 在Cognito用户池添加Apple作为身份提供商,填入Service ID、团队ID、密钥ID和私钥内容。

2. React Native项目配置

  • 安装Expo Apple认证依赖:
    npx expo install expo-apple-authentication
    
  • 在app.json中添加Apple认证权限:
    {
      "expo": {
        "ios": {
          "usesAppleSignIn": true,
          "bundleIdentifier": "your.bundle.id" // 与Apple Service ID完全匹配
        }
      }
    }
    

3. 代码实现

与Google SSO逻辑一致,调用toFederatedSignIn:

const loginWithApple = useCallback(async () => {
  try {
    await toFederatedSignIn({ provider: 'apple' });
    // 处理登录成功后的逻辑
  } catch (error) {
    console.error('Apple login error:', error);
  }
}, [toFederatedSignIn]);

注意:Apple SSO仅支持iOS 13+,模拟器测试需确保系统版本符合要求,真机测试更可靠。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:44:55