Flutter集成Firebase Facebook登录报Invalid OAuth access token错误
解决Flutter中Facebook登录转Firebase Auth时的invalid-credential错误
我之前踩过一模一样的坑!虽然你已经做了不少配置检查,但结合报错信息(OAuth access token无效),还有几个关键细节可能没覆盖到,咱们一步步来排查:
1. 先确认Facebook返回的Access Token是否真的有效
Facebook登录成功不代表token能被Firebase认可,你可以先手动验证下token:
- 打印
result.accessToken的完整信息,看看expires时间是否过期,userId是否和你的FB账号匹配; - 用Facebook开发者工具里的token调试功能,输入拿到的token,确认它的状态是有效,并且包含
email权限(毕竟你请求了这个权限)。
2. 核对OAuth重定向URI的配置
这个是很多人忽略的点:
- 打开Firebase控制台,进入Facebook认证页面,复制里面的OAuth redirect URI(格式大概是
https://<你的项目ID>.firebaseapp.com/__/auth/handler); - 到Facebook开发者控制台,进入Settings -> Basic,把这个URI粘贴到Valid OAuth Redirect URIs列表里,保存更改。
同时,在Facebook的Products -> Facebook Login -> Settings里,确保这几个选项都开启:
- Client OAuth Login
- Web OAuth Login
- Embedded Browser OAuth Login(移动端应用必须开这个)
3. 升级你的依赖包版本
你用的flutter_facebook_login: ^3.0.0已经被官方弃用了,而且firebase_auth: ^0.18.3+1也是很旧的版本,新旧包之间的兼容性问题很容易导致token验证失败。建议直接换成官方推荐的新包:
- 替换
flutter_facebook_login为flutter_facebook_auth(最新稳定版); - 把
firebase_auth升级到最新稳定版(比如现在的^4.x.x系列)。
升级后的登录代码大概是这样的:
import 'package:flutter_facebook_auth/flutter_facebook_auth.dart'; import 'package:firebase_auth/firebase_auth.dart'; // 登录逻辑 final LoginResult result = await FacebookAuth.instance.login(permissions: ['email']); if (result.status == LoginStatus.success) { // 获取有效token final accessToken = result.accessToken!; final OAuthCredential credential = FacebookAuthProvider.credential(accessToken.token); try { await FirebaseAuth.instance.signInWithCredential(credential); print("Firebase登录成功!"); } catch (e) { print("登录失败:$e"); } } else { print("Facebook登录失败:${result.message}"); }
4. 检查Android应用的签名哈希(Android端专属)
如果是Android应用,Facebook必须验证你的应用签名哈希,不匹配的话token也会无效:
- 用keytool命令生成调试版的SHA-1哈希(如果是发布版,用对应的keystore):
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64 - 把生成的哈希值添加到Facebook开发者控制台的Settings -> Basic -> Android Key Hashes里;
- 同时也要把这个SHA-1值添加到Firebase控制台的Project Settings -> 你的Android应用 -> 签名证书指纹里。
5. 清除缓存后重试
有时候旧的token或配置缓存会搞事情,你可以:
- 卸载Flutter应用;
- 打开Facebook应用,清除它的缓存;
- 重新安装你的Flutter应用,再测试登录流程。
按照这个顺序排查,大概率能解决问题!我当时就是因为漏加了Firebase的redirect URI导致的错误,加上之后就正常了。
内容的提问来源于stack exchange,提问作者Arkay
相关产品推荐
相关产品推荐

