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

