每次页面重新启动时,Firebase.auth().currentUser 都会变为 null

Posted

技术标签:

【中文标题】每次页面重新启动时,Firebase.auth().currentUser 都会变为 null【英文标题】:Firebase.auth().currentUser turns to null every time the page restarts 【发布时间】:2020-09-30 22:29:51 【问题描述】:

我在 vue 应用程序中使用 firebase 身份验证 每次登录用户后重新启动页面时 currentUser 变为 null

  firebase.auth().signInWithEmailAndPassword(this.email, this.password)
    .then(() => this.$router.push(name: 'Home'))
    .catch(err => this.feedback = err.message)

在 vue 路由器中

 router.beforeEach((to, from, next) => 
  if (to.matched.some(record => record.meta.requiresAuth)) 
    let user = firebase.auth().currentUser
    if (!user) 
      next(name: 'Login')
     else next()
   else next()
)

我希望用户不是每次重新启动页面时都登录一次

【问题讨论】:

【参考方案1】:

这是因为 beforeEach 在 firebase 完全完成初始化之前被执行。

您可以使用onAuthStateChanged 观察者确保 vue 应用仅在 firebase 完全初始化后才被初始化。

修复它的一种方法是在 ma​​in.js(new Vue( ... )) 中使用 onAuthStateChanged 包装 vue 初始化代码,如下所示:

let app;

...
firebase.initializeApp( ... );

firebase.auth().onAuthStateChanged(() => 
  if (!app)  // ignore reinitializing if already init (when signing out/login)
    new Vue( ... )
    ...
  
)

【讨论】:

以上是关于每次页面重新启动时,Firebase.auth().currentUser 都会变为 null的主要内容,如果未能解决你的问题,请参考以下文章

当我更新 ListView 上的列表时,Flutter 页面不会重新加载

当我使用重新加载功能时,Firebase Auth 会注销我吗?

有时 firebase.auth().onAuthStateChanged 在我刷新页面时返回 null 用户

每次我打开应用程序时,Phonegap 应用程序都会重新启动。有啥建议可以返回同一页面吗?

Flutter Firebase auth 用户在设备上不是持久的

firebase.auth().onAuthStateChanged 不工作