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

Expo(EAS)集成Firebase谷歌登录报‘Access Blocked’错误及配置咨询

Expo(EAS/expo-auth-session) + Firebase谷歌登录遇「Access Blocked: Authorization Error」问题

❗问题详情

使用**Expo(EAS / expo-auth-session)**结合Firebase Authentication开发React Native应用,邮箱/密码登录功能正常,但谷歌登录触发后立即失败,跳转至谷歌错误页面:

Access Blocked: Authorization Error
Error: unauthorized_client / blocked request(提示内容可能略有差异)

应用无法完成Firebase谷歌认证流程。

当前核心代码配置:

import * as Google from 'expo-auth-session/providers/google';

const [request, response, promptAsync] = Google.useAuthRequest({
  clientId: WEB_CLIENT_ID,
  scopes: ['profile', 'email'],
});

const WEB_CLIENT_ID = "xxxxx.apps.googleusercontent.com";
makeRedirectUri({ useProxy: true })

已确认正常工作的功能:

  • Firebase邮箱/密码认证(全功能正常)
  • EAS构建成功
  • Firebase项目基础配置完成
  • 后端集成无异常

已排查项

  • Firebase控制台已启用谷歌登录方式
  • 代码中使用了Web客户端ID
  • 已配置Expo重定向URI
  • Firebase认证初始化逻辑正确
  • Expo开发环境及EAS构建后的应用其他功能正常

咨询问题

请提供Expo(EAS构建)与Firebase集成时,谷歌登录的生产环境标准配置方案,并解答以下具体问题:

  • 应该使用Expo代理还是原生重定向?
  • 该配置是否需要Android SHA-1指纹?
  • 仅使用Web Client ID是否足够,还是必须创建Android OAuth客户端?
  • 「Access Blocked: Authorization Error」错误的常见触发原因是什么?

同时希望提供一份可直接运行的Expo + Firebase谷歌登录参考代码配置。

OAuth配置页面参考截图:
来自cloud.google的OAuth页面截图


解决方案

一、错误核心原因

「unauthorized_client / blocked request」的常见触发点:

  1. OAuth客户端未正确配置允许的重定向URI
  2. 生产环境使用了仅适用于开发的Expo代理,且未配置原生客户端
  3. 缺少对应平台(Android/iOS)的OAuth客户端及SHA-1指纹(Android)

二、生产环境标准配置方案

1. 平台客户端配置(必须)
  • Android:
    • 在Firebase控制台获取EAS构建生成的SHA-1指纹(不要用本地调试指纹)
    • 在与Firebase绑定的Google Cloud Console中创建Android OAuth客户端ID,包名与Expo app.json中的android.package一致,填入SHA-1指纹
  • iOS:
    • 在Google Cloud Console创建iOS OAuth客户端ID,Bundle ID与Expo app.json中的ios.bundleIdentifier一致
  • Web客户端ID:仅用于Expo开发环境,生产环境优先使用平台专属客户端
2. 重定向URI选择
  • 开发环境:使用Expo代理(makeRedirectUri({ useProxy: true })),无需额外配置
  • 生产环境:使用原生重定向,禁用Expo代理,配置方式:
    makeRedirectUri({
      useProxy: false,
      native: `${YOUR_APP_SCHEME}:/oauthredirect`,
    })
    
    同时在app.json中配置scheme:
    {
      "expo": {
        "scheme": "yourappscheme",
        "android": {
          "package": "com.your.package"
        },
        "ios": {
          "bundleIdentifier": "com.your.bundle"
        }
      }
    }
    
    最后将该原生重定向URI添加到对应平台OAuth客户端的「已授权重定向URI」列表中
3. 可运行参考代码
import * as Google from 'expo-auth-session/providers/google';
import { firebase } from '@react-native-firebase/auth';
import Constants from 'expo-constants';
import { Platform } from 'react-native';

// 替换为你的客户端ID
const WEB_CLIENT_ID = "xxxxx.apps.googleusercontent.com";
const ANDROID_OAUTH_CLIENT_ID = "xxxxx-android.apps.googleusercontent.com";
const IOS_OAUTH_CLIENT_ID = "xxxxx-ios.apps.googleusercontent.com";

// 根据环境切换客户端ID
const isProduction = !__DEV__;
const CLIENT_ID = isProduction 
  ? Platform.select({
      android: ANDROID_OAUTH_CLIENT_ID,
      ios: IOS_OAUTH_CLIENT_ID,
      default: WEB_CLIENT_ID,
    })
  : WEB_CLIENT_ID;

const [request, response, promptAsync] = Google.useAuthRequest({
  clientId: CLIENT_ID,
  scopes: ['profile', 'email'],
  redirectUri: makeRedirectUri({
    useProxy: __DEV__,
    native: `${Constants.expoConfig.scheme}:/oauthredirect`,
  }),
});

// 处理登录回调
useEffect(() => {
  if (response?.type === 'success') {
    const { authentication } = response;
    const credential = firebase.auth.GoogleAuthProvider.credential(authentication.idToken);
    firebase.auth().signInWithCredential(credential)
      .then(userCredential => {
        // 登录成功逻辑:获取用户信息、跳转主页等
        const user = userCredential.user;
      })
      .catch(error => {
        // 错误处理:提示用户、记录日志等
        console.error('谷歌登录失败:', error);
      });
  }
}, [response]);

三、关键问题解答

  1. Expo代理 vs 原生重定向:开发环境用Expo代理(简化配置),生产环境必须用原生重定向(符合谷歌OAuth生产规范,避免被拦截)
  2. Android SHA-1需求:必须配置,谷歌会验证Android应用的签名指纹,缺失会直接触发unauthorized_client错误
  3. 客户端ID选择:生产环境需使用对应平台的OAuth客户端ID(Android/iOS),仅Web Client ID无法满足生产环境的平台验证要求
  4. 错误常见原因:
    • 重定向URI未添加到OAuth客户端的授权列表
    • 生产环境使用了Expo代理且未配置原生客户端
    • Android应用未配置正确的SHA-1指纹
    • 客户端ID与当前运行平台不匹配

内容的提问来源于stack exchange,提问作者Syed Laeeq Ahmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 20:47:26