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

React Native Expo SDK 49 Google OAuth iOS登录报错求助

Expo Go iOS 谷歌登录报错400: Invalid_request (redirect_uri不匹配)

问题场景

在Expo Go iOS设备上运行应用,点击谷歌登录按钮时弹出以下错误:

访问被阻止:授权错误
无法登录此应用,因其不符合谷歌OAuth 2.0安全政策。
可告知开发者该应用未遵守一项或多项谷歌验证规则。
错误400: Invalid_request
详情:redirect_uri=exp://192.168.50.112:8081

已在谷歌开发者控制台配置redirect_uri为https://auth.app.expo.io/@devname/AppLock(AppLock为app.json中的slug),但问题依旧。


解决方案

1. 修正makeRedirectUri参数,确保生成正确代理URI

当前配置的scheme参数会干扰Expo代理URI的生成,修改参数如下:

// 移除scheme,明确指定项目owner和slug
const EXPO_REDIRECT_PARAMS = { 
  useProxy: true,
  path: '@devname/AppLock' // 替换成你的expo用户名和项目slug
};

修改后makeRedirectUri会生成你在控制台配置的https://auth.app.expo.io/@devname/AppLock,而非本地exp://地址。

2. 检查谷歌开发者控制台的客户端ID配置

  • iOS客户端ID:
    • 确保授权重定向URI中添加了调试时的本地URI(比如exp://192.168.50.112:8081,可从错误信息中复制)
    • 确认Bundle ID与app.json中ios.bundleIdentifier完全一致
  • Web客户端ID:
    • 确认授权重定向URI包含https://auth.app.expo.io/@devname/AppLock和http://localhost:8081(本地调试用)

3. 区分调试与生产环境的redirect URI

Expo Go调试和生产构建的redirect URI规则不同,可通过Expo常量自动适配:

import Constants from 'expo-constants';

const isExpoGo = !Constants.appOwnership || Constants.appOwnership === 'expo';

const [request, result, promptAsync] = Google.useAuthRequest({
  iosClientId: iosClientId,
  webClientId: googleWebClientId, 
  scopes: ['openid','email'],
  redirectUri: isExpoGo 
    ? makeRedirectUri({ useProxy: true, path: '@devname/AppLock' })
    : makeRedirectUri({ scheme: 'AppLock' }) // 生产环境使用自定义scheme
});

4. 清理缓存重启项目

  • 彻底退出Expo Go应用后台
  • 重启Expo开发服务器:执行expo start -c(-c参数清除缓存)
  • 重新扫码打开项目后测试登录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 07:43:09