Flutter StreamBuilder是否使用缓存?FirebaseAuth状态持久化疑问
FirebaseAuth authStateChanges() 与StreamBuilder状态保留的真相
先给你划重点:StreamBuilder根本不存状态,你看到重启后登录状态还在,全是Firebase Auth SDK的本地持久化在搞事情。
具体怎么回事?
- Firebase Auth的本地存储:Firebase Auth默认会把用户的认证凭据(比如ID Token、刷新令牌)加密存在设备本地——iOS用Keychain,Android用SharedPreferences或者Keystore。应用重启时,SDK会自动读取这些本地凭据,验证是否有效(比如用刷新令牌换个新的ID Token),没问题的话就自动恢复登录状态。
- authStateChanges()流的工作逻辑:这个流的作用就是实时推送用户的认证状态变化。应用启动时,Firebase Auth首先检查本地存储:
- 有有效凭据,立刻给流推一个已登录的用户对象
- 凭据无效或者没有,就推
null表示未登录
- StreamBuilder只是个“UI渲染器”:它就负责盯着这个流,流里一有新数据(不管是启动时的初始状态,还是后来的登录/登出操作),就触发UI重建,显示对应的界面(比如主页或者登录页)。
想测试的话可以试试这个:
如果要关掉持久化,初始化的时候加个配置:
await FirebaseAuth.instance.setPersistence(Persistence.NONE);
这样设置后,重启应用就不会保留登录状态了,每次启动都得重新登录。
内容的提问来源于stack exchange,提问作者ang
相关产品推荐
相关产品推荐

