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

Expo-auth-session中Google.useAuthRequest()返回success但authentication为null

Expo裸机Android谷歌登录:success但无access_token问题解决

为什么会出现这个情况?

从Expo托管工作流切换到裸机Android后,expo-auth-session的谷歌授权默认流程从隐式授权流(直接返回access_token)变成了授权码流(返回code,需后端换token),这是裸机环境下的安全适配逻辑,所以会出现success但authentication为null、只有code的情况。

解决办法

1. 强制使用隐式授权流(快速调试)

在Google.useAuthRequest里显式指定responseType: 'token',就能回到之前直接拿access_token的逻辑:

const [request, response, promptAsync] = Google.useAuthRequest({
  androidClientId: '你的Android客户端ID',
  responseType: 'token', // 关键配置
});

⚠️ 注意:隐式流安全性较低,仅适合测试,生产环境不建议用。

2. 切换到授权码流(生产环境推荐)

如果要遵循安全规范,需要把前端拿到的code传给后端,由后端调用谷歌令牌接口换access_token:

  • 后端请求地址:https://oauth2.googleapis.com/token
  • 请求参数(POST表单格式):
    • code: 前端返回的授权码
    • client_id: 你的Android客户端ID
    • client_secret: 谷歌云控制台中生成的Android客户端密钥(注意保密)
    • redirect_uri: com.your.app:/oauthredirect(要和谷歌控制台、app.json的scheme一致)
    • grant_type: authorization_code

3. 检查谷歌云控制台配置

  • 签名指纹匹配:裸机Android的debug/release签名指纹和Expo托管的默认指纹不一样,必须在谷歌控制台的Android客户端配置里添加当前项目的签名指纹。
  • redirect_uri一致:确保谷歌控制台里配置的redirect_uri和app.json中android.scheme字段对应,格式为你的包名:/oauthredirect。

4. 确认Expo配置生效

  • 检查app.json里的android.package和scheme是否正确配置:
{
  "expo": {
    "android": {
      "package": "com.your.app",
      "scheme": "com.your.app"
    }
  }
}
  • 运行npx expo prebuild重新生成原生文件,确保配置同步到Android项目中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:15:36