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

Windows端Firebase谷歌登录报invalid-credential错误求助

问题描述

使用google_sign_in_all_platforms包实现Firebase谷歌登录时,谷歌登录流程成功完成,但调用firebaseAuth.signInWithCredential时抛出错误:

[firebase_auth/invalid-credential] The supplied auth credential is malformed or has expired.

已按照官方指南完成Firebase项目设置及Google Cloud Console配置,相关代码如下:

final googleSignInProvider = Provider<GoogleSignIn>((ref) {
  return GoogleSignIn(
    params: GoogleSignInParams(
      timeout: Duration(hours: 24),
      clientId: clientId,
      clientSecret: clientSecret,
      redirectPort: redirectPort,
      scopes: ['email', 'profile'],
    ),
  );
});

final firebaseAuthProvider = Provider<FirebaseAuth>((ref) {
  return FirebaseAuth.instance;
});

Future<void> firebaseSignIn(BuildContext context, WidgetRef ref) async {
  final firebaseAuth = ref.watch(firebaseAuthProvider);
  final googleSignIn = ref.watch(googleSignInProvider);

  try {
    //await googleSignIn.signOut();
    final credentials = await googleSignIn.signIn();
    if (credentials != null) {
      debugPrint('Signed in successfully.'); //Google sign in is successful
    } else {
      debugPrint('Sign in failed.');
      return;
    }

    final authCredential = GoogleAuthProvider.credential(
      idToken: credentials.idToken,
      accessToken: credentials.accessToken,
    );

    //The below line is failing. Printing the token is however successful
    final userCredential = await firebaseAuth.signInWithCredential(authCredential);

    final user = userCredential.user;
    debugPrint(user?.email);

  } catch (e) {
    debugPrint("<<<<< Failed to sign in with Firebase $e");
  }
}
排查步骤
  • 验证ID Token有效性:
    将获取到的credentials.idToken通过Google官方的Token验证工具验证,确认其是否有效、是否关联正确的项目ID、是否过期。若Token无效,说明google_sign_in_all_platforms返回的凭证本身存在问题。
  • 核对Client ID一致性:
    确认Firebase项目中配置的对应平台Client ID(如Web端用Web Client ID),与GoogleSignInParams中的clientId完全一致,包括大小写和特殊字符,避免混用不同平台的Client ID。
  • 移除Web平台的Client Secret:
    若为Web平台,GoogleSignInParams无需传入clientSecret(该参数用于服务器端验证场景),尝试移除该参数后重新测试。
  • 清除旧会话状态:
    取消代码中await googleSignIn.signOut();的注释,确保每次登录前清除旧的登录会话,避免旧凭证残留导致冲突。
  • 检查Firebase Auth配置:
    确认Firebase控制台中「Authentication」模块已启用,且「Google」登录方式已开启,关联的Client ID配置正确。
  • 补充OpenID权限:
    将scopes修改为['email', 'profile', 'openid'],因为Firebase需要OpenID协议生成的ID Token来完成身份验证,部分场景下默认scopes不包含该权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 21:35:08