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

