React-Native中onAuthStateChanged突发返回null问题求助
Firebase Auth onAuthStateChanged 突然返回null的排查方案
过去几周,使用
onAuthStateChanged在启动页后将已登录用户重定向至首页的代码运行正常,但本周起onAuthStateChanged返回的auth.currentUser为null,无法正常完成跳转。严格遵循Firebase官方文档操作,却无法定位突发故障的原因。当前环境:React-Native 0.71.3 + Expo 48.0.0,已登录用户重启应用时,以下代码失效:
const auth = getAuth(app); useEffect(() => { let subscriber = onAuthStateChanged(auth, (user) => { console.log(auth.currentUser) // 现在返回null if (user) { navigation.navigate("Root") } }); return subscriber }, [])
排查步骤与解决方案
显式设置Firebase Auth持久化策略
Expo环境下默认持久化可能因缓存异常失效,手动指定持久化方式:import { getAuth, setPersistence, browserLocalPersistence } from "firebase/auth"; const auth = getAuth(app); // 初始化auth后立即配置持久化 setPersistence(auth, browserLocalPersistence) .then(() => { // 在此挂载onAuthStateChanged监听 }) .catch((error) => { console.error("持久化配置失败:", error); });优先使用回调参数user,而非auth.currentUser
auth.currentUser可能在监听触发时未完成初始化,回调传入的user是实时状态的可靠来源,同时补全依赖数组:useEffect(() => { const subscriber = onAuthStateChanged(auth, (user) => { console.log("实时用户状态:", user); if (user) { navigation.navigate("Root"); } }); return subscriber; }, [navigation]);清除Expo缓存并重建项目
缓存异常是突发问题的常见诱因,执行以下命令:expo r -c # 清除缓存重启项目 rm -rf node_modules && npm install # 重装依赖 expo prebuild --clean # 若使用预构建,清理后重新构建检查Firebase SDK版本兼容性
Expo 48.0.0建议搭配^9.19.0版本的Firebase SDK,过高或过低版本可能引发兼容问题。查看package.json中firebase相关依赖,统一版本后重装。检查设备存储权限
iOS设备确认应用已开启存储权限;Android设备检查应用缓存是否被清理,或是否开启隐私模式导致本地存储无法读取。
内容的提问来源于stack exchange,提问作者singamnv
相关产品推荐
相关产品推荐

