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

Firebase认证报错:List<Object?>无法转为PigeonUserDetails?求助

问题解决方案

一、解决type 'List<Object?>' is not a subtype of type 'PigeonUserDetails?' in type cast异常

这个类型转换错误是Firebase Auth SDK底层依赖的Pigeon(Flutter与原生通信工具)版本不兼容导致的,按以下步骤修复:

  • 升级所有Firebase相关依赖到最新稳定版,修改pubspec.yaml:
    firebase_core: ^latest_version
    firebase_auth: ^latest_version
    cloud_firestore: ^latest_version
    
    执行flutter pub get,然后运行flutter clean清理缓存,重启IDE后重新编译项目。
  • 检查依赖冲突:运行flutter pub deps查看依赖树,确保所有依赖的Pigeon版本与Firebase Auth要求的版本一致,若有冲突,可手动在pubspec.yaml中指定兼容的Pigeon版本(通常升级Firebase SDK会自动解决此问题)。
  • 重置原生项目文件:iOS端进入ios目录执行pod install;Android端可执行flutter build apk或清理Gradle缓存(删除android/.gradle目录)。

二、解决跨域重定向登录提示

现代浏览器已禁止跨域重定向式的认证流程,按以下方式处理:

  • 确保Firebase Auth SDK已升级到最新版(与第一步同步),新版SDK默认支持更安全的弹出式认证。
  • 若使用Google登录,将重定向登录逻辑改为弹出式:
    // 替换原signInWithRedirect逻辑
    final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();
    if (googleUser != null) {
      final GoogleSignInAuthentication googleAuth = await googleUser.authentication;
      final credential = GoogleAuthProvider.credential(
        accessToken: googleAuth.accessToken,
        idToken: googleAuth.idToken,
      );
      await FirebaseAuth.instance.signInWithCredential(credential);
    }
    
  • 在Firebase控制台的「认证」->「设置」->「授权域名」中,添加应用的所有访问域名(包括本地调试用的localhost:端口号),避免跨域限制。
  • 若开启了App Check功能,确保其配置正确,不会拦截合法的认证请求。

额外安全提示

你的注册代码中存在安全风险:不要将用户密码明文存储到Firestore中。Firebase Auth已自动存储密码哈希,完全无需在数据库中保存明文密码,删除注册代码中users.add里的'password': event.password字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 12:57:09