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
相关产品推荐
相关产品推荐

