iOS使用Firebase Auth登录后重启应用偶发获取currentUser为nil问题
Firebase Auth登录状态多次启动后返回nil的原因排查方向
- 持久化配置被修改
Firebase Auth默认启用本地持久化,若代码中手动设置了持久化等级为Auth.Persistence.session或Auth.Persistence.none,会导致登录状态在应用退出、系统清理缓存后自动失效。检查是否有全局修改Auth持久化策略的代码,比如误将测试阶段的临时配置带到了正式逻辑中。 - iOS Keychain存储异常
iOS端Firebase Auth的登录凭证默认存储在系统Keychain中,如下情况会导致读取失败:- 应用开启了数据保护(Data Protection)能力,且Keychain项的访问等级设置为需设备解锁后才能访问,若启动应用时设备处于锁定状态,会读取不到凭证返回nil
- 应用的Keychain配置错误,比如开启了Keychain共享但未正确配置访问组,或者应用的签名证书、Team ID发生变更,导致原有Keychain数据无法被读取
- 项目中引入的缓存清理类第三方库,误删除了Firebase存储在Keychain或UserDefaults中的关联凭证数据
- Refresh Token被吊销
Firebase用户的Refresh Token若被主动吊销,重启应用时SDK自动刷新ID Token失败,会自动清除本地登录状态。触发场景包括:在Firebase控制台禁用/删除了该测试账号、用户修改了账号密码、主动调用了revokeRefreshToken接口吊销当前用户的刷新凭证。若你另一款应用使用的是不同的测试账号,就不会出现该问题。 - 误触发登出逻辑
检查应用生命周期方法(如applicationDidEnterBackground、applicationWillTerminate)、内存警告回调逻辑中是否有误写的signOut调用,部分场景下前两次启动未触发该逻辑,第三次启动时刚好触发导致状态被清除。 - SDK版本兼容问题
对比两款应用的Firebase Auth SDK版本,部分旧版本的Firebase iOS SDK存在持久化存储的已知bug,若当前问题应用使用的是低于8.0.0版本的Firebase Auth SDK,可尝试升级SDK到最新稳定版修复。
内容的提问来源于stack exchange,提问作者BrianLu
相关产品推荐
相关产品推荐

