firebaseAuth.getAuth()何时与onAuthStateChanged()同步变为非空?
Firebase Auth冷启动时安全使用
getAuth().currentUser的时机 在使用Firebase Auth包从冷启动识别用户是否已认证时,正确方式是使用onAuthStateChanged函数,示例代码如下:
firebaseAuth.onAuthStateChanged(firebase.getAuth(), (user) => { if (user) { // 用户已登录 } else { // 无用户登录 } });
Firebase还提供getAuth方法获取当前认证状态,但观察发现getAuth的状态更新滞后于onAuthStateChanged:getAuth().currentUser在onAuthStateChanged触发前会返回null,要等到onAuthStateChanged触发后的某个时刻才会返回当前用户。
何时使用getAuth().currentUser才安全?
这里的“安全”指getAuth().currentUser能反映onAuthStateChanged回调中的最终认证状态。
由于官方文档未明确说明这一点,结合实践经验,只有在onAuthStateChanged至少触发一次之后,使用getAuth().currentUser才是安全的。
原因是Firebase Auth在冷启动时需要从本地缓存或服务器加载用户认证状态,这个过程是异步的。onAuthStateChanged的触发标志着认证状态加载完成并稳定,此时getAuth().currentUser才会同步更新为正确的用户对象(或null)。
如果在onAuthStateChanged触发前直接调用getAuth().currentUser,很可能得到的是未完成加载的临时null值,无法反映真实的认证状态。
补充说明:已在Firebase JS SDK的GitHub仓库提交相关问题报告(编号6752)。
内容的提问来源于stack exchange,提问作者theahura
相关产品推荐
相关产品推荐

