FirebaseAuth.instance.userChanges持续触发问题咨询
解决Firebase Auth userChanges()在Web端无登录状态变更时持续触发的问题
问题原因
userChanges()监听的是用户对象的所有变化,包括但不限于:
- 用户登录/登出状态变更
- 用户个人资料(昵称、头像等)更新
- ID令牌自动刷新(Web端默认每小时刷新一次)
- 用户邮箱验证状态变更
Web端中Firebase会自动刷新用户的ID令牌,每次刷新都会更新用户对象的令牌相关字段,导致userChanges()回调被触发,但此时用户的登录状态并未改变。
解决方案
方案1:改用authStateChanges()(推荐)
如果你的业务只需要监听用户登录/登出的状态变化,直接替换为authStateChanges()即可,它仅在用户登录或登出时触发:
FirebaseAuth.instance.authStateChanges().listen((user) async { debugPrint('user auth state changed in main'); });
方案2:在userChanges()中手动过滤状态变更
如果必须使用userChanges(),可以通过对比前后用户的登录状态来过滤不必要的触发:
User? previousUser; FirebaseAuth.instance.userChanges().listen((currentUser) async { // 仅当登录状态实际变化时执行逻辑 bool wasLoggedIn = previousUser != null; bool isLoggedIn = currentUser != null; if (wasLoggedIn != isLoggedIn) { debugPrint('user state changed in main'); } previousUser = currentUser; });
内容的提问来源于stack exchange,提问作者Sunil Gupta
相关产品推荐
相关产品推荐

