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

Flutter开发中Facebook登录后facebookAuthCredential.idToken为null问题

问题原因
  • Firebase封装的FacebookAuthProvider.credential()方法仅需传入Facebook返回的access token即可生成合法的认证凭证,该凭证的idToken字段默认无值属于官方设计的正常现象,不是代码逻辑错误。
  • Facebook移动端登录流程默认不返回OpenID Connect标准的idToken,只有access token作为有效认证凭证,因此生成的OAuthCredential不会填充idToken字段。
正确使用方式

现有登录逻辑无需修改,直接调用signInWithCredential即可正常完成Firebase认证。如果需要获取Firebase侧的用户idToken,应该在登录成功后从返回的User对象中获取,示例代码如下:

Future<UserCredential> signInWithFacebook() async {
  // 触发Facebook登录流程
  final LoginResult loginResult = await FacebookAuth.instance.login();

  // 用access token生成认证凭证
  final OAuthCredential facebookAuthCredential =
      FacebookAuthProvider.credential(loginResult.accessToken!.token);
  
  // 此处idToken为null属于正常情况,不影响后续登录流程
  // print(facebookAuthCredential.idToken); 

  // 完成Firebase登录
  final userCredential = await FirebaseAuth.instance.signInWithCredential(facebookAuthCredential);
  
  // 如需获取idToken,从登录成功的User对象中获取
  final idToken = await userCredential.user?.getIdToken();
  print(idToken); // 此处可拿到有效的Firebase idToken

  return userCredential;
}
补充说明
  • 若调用signInWithCredential时出现报错,优先检查Firebase控制台中Facebook登录开关已开启,且Facebook开发者后台的OAuth重定向URI已正确配置为Firebase指定的地址,该类报错和本次idToken为null的问题无关。
  • 如果你是需要Facebook侧返回的idToken而非Firebase的idToken,需要在发起Facebook登录时明确申请openid权限,同时调用Facebook的接口单独获取,常规Firebase登录场景不需要该操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:39:03