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

Flutter Web使用google_sign_in如何获取refreshToken或serverAuthCode

Flutter google_sign_in插件获取refreshToken/serverAuthCode解决方案

核心问题原因

google_sign_in插件默认不会直接返回refreshToken,serverAuthCode返回为空绝大多数是配置错误导致的,可按以下步骤排查修复:


可行操作步骤

  • 首先在Google Cloud控制台完成三类OAuth客户端ID的创建:Android客户端ID、iOS客户端ID、Web客户端ID,Web客户端ID是获取serverAuthCode的必要配置,缺失就会返回null
  • 初始化GoogleSignIn实例时,必须显式传入serverClientId参数,参数值为你创建的Web类型OAuth客户端ID,不要错误传入移动端的客户端ID
  • 参考初始化代码:
final GoogleSignIn googleSignIn = GoogleSignIn(
  // 此处必须传Web类型的客户端ID,不能填Android/iOS的客户端ID
  serverClientId: "xxxxxx.apps.googleusercontent.com",
  scopes: [
    'email',
    'https://www.googleapis.com/auth/userinfo.profile',
    // 按需添加其他需要申请权限的scope
  ],
);
  • 触发登录流程后,即可从返回的GoogleSignInAccount对象中拿到非空的serverAuthCode字段

兑换refreshToken的方式

  • 拿到serverAuthCode后,将其传递到你的后端服务,由后端调用Google OAuth凭证兑换接口,即可同时获取accessToken、idToken和refreshToken
  • 注意:serverAuthCode仅可兑换一次,兑换后立即失效,禁止在前端直接兑换token,必须走后端交互避免凭证泄露
  • 如果需要多次获取refreshToken,可引导用户在Google账号安全中心取消当前应用的授权,重新登录时Google会在首次授权场景下返回新的refreshToken

边缘场景适配

  • iOS端需要额外在Xcode工程的Info配置中添加URL Schemes,值为iOS客户端ID的反转字符串,否则授权回调流程会失败,也会导致serverAuthCode返回为空
  • 所有客户端ID的包名/Bundle ID必须和你的应用实际配置完全一致,签名证书SHA1值也需要和Google Cloud控制台配置的匹配,否则会出现权限校验失败问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:06:03