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

Flutter Web中无法获取Google ID Token,始终返回Null

Flutter Web Google登录无法获取ID Token(始终返回Null)的排查与解决

1. 补全GoogleSignIn初始化的ClientID

Flutter Web环境下,GoogleSignIn不会自动读取Firebase配置中的客户端ID,必须显式指定,否则无法获取ID Token:

final GoogleSignIn googleSignIn = GoogleSignIn(
  scopes: <String>['email', 'openid'],
  clientId: '你的Web客户端ID.apps.googleusercontent.com', // 必须添加该行
);

客户端ID可从Google控制台的OAuth 2.0客户端列表中复制(类型为「Web应用」的条目)。

2. 验证OAuth客户端配置

  • 授权JavaScript来源:确保Google控制台中已添加Flutter Web的运行域名,本地调试需包含http://localhost:端口号,生产环境需添加正式域名(精确匹配,不能带路径)。
  • 授权重定向URI:必须添加http://localhost:端口号/google_sign_in(本地)或生产域名下的对应路径,这是google_sign_in插件默认的回调地址,遗漏会导致认证流程中断。

3. 切换为Firebase Auth原生Web认证流程

手动处理GoogleSignIn在Web端容易出现配置遗漏,建议直接使用Firebase Auth封装好的弹窗/重定向登录:

Future<UserCredential?> signInWithGoogle() async {
  try {
    final GoogleAuthProvider provider = GoogleAuthProvider();
    provider.addScope('email');
    provider.addScope('openid');
    // 弹窗模式(适合单页应用)
    return await FirebaseAuth.instance.signInWithPopup(provider);
    // 重定向模式(适合需要刷新页面的场景)
    // return await FirebaseAuth.instance.signInWithRedirect(provider);
  } catch (e) {
    print("Error signing in with Google: $e");
    return null;
  }
}

该方式会自动处理ID Token、Access Token的获取与校验,减少手动配置出错概率。

4. 更新依赖版本

旧版本的google_sign_in和firebase_auth可能存在Web端兼容问题,更新至最新稳定版:
在pubspec.yaml中修改依赖:

firebase_auth: ^4.12.0
google_sign_in: ^5.4.0

执行flutter pub upgrade更新后,重新构建Web项目:flutter build web。

5. 调试日志定位问题

在获取认证信息后添加日志,同时查看浏览器开发者工具的网络请求:

final GoogleSignInAuthentication googleAuth = await googleUser.authentication;
print('Access Token: ${googleAuth.accessToken}');
print('ID Token: ${googleAuth.idToken}');
print('Server Auth Code: ${googleAuth.serverAuthCode}');

查看Network面板中Google OAuth相关请求的响应,若出现invalid_client或redirect_uri_mismatch,直接对应客户端ID或重定向URI的配置错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:11:08