You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase使用signOut仅登出首个用户,二次登出返回null是否正常?

这是Firebase Auth的正常行为,咱来理清楚为啥会这样

首先得明确一个核心规则:Firebase Auth在单个客户端实例里,同一时间只能有一个活跃的用户会话——这就是你遇到这个问题的根本原因。

咱拆解下你的操作流程,一步步看:

  • 用customToken登录用户1:这时候客户端的活跃用户是用户1,一切正常。
  • 用customToken登录用户2:这一步Firebase会自动把之前的用户1给登出,直接替换成用户2作为当前活跃用户。也就是说,从你登录用户2的那一刻起,用户1已经处于登出状态了,和你手动调用signOut的效果完全一样。
  • 尝试登出用户1:这时候用户1早就不是当前活跃用户了,这个操作其实啥也干不了,相当于给一个已经下线的人说“你退下吧”,自然不会有任何有效反馈。
  • 尝试登出用户2:这时候你调用firebase.auth().signOut(),成功后firebase.auth().currentUser会变成null——这完全是正常的,因为登出成功后本来就没有当前用户了。你说的“返回null”应该就是指这个状态,这是符合预期的结果。

再给你补点代码层面的细节:

  • 每次调用firebase.auth().signInWithCustomToken(token),Firebase都会直接替换当前的用户会话,旧用户会被自动登出,同时触发onAuthStateChanged事件告诉你用户状态变了。
  • firebase.auth().signOut()这个方法很“宽容”:不管当前有没有活跃用户,它都会成功执行。如果有用户,就登出并把currentUser设为null;如果已经没用户了,执行它也不会报错,只是currentUser保持null。

要是你的业务场景需要同时处理多个用户,那得注意:Firebase Auth客户端本身不支持多用户同时登录。你要么自己管理多个独立的Auth实例,要么把多用户逻辑放到服务器端处理,但客户端同一时间只能有一个活跃用户。

内容的提问来源于stack exchange,提问作者Diego

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:08:50