如何修复Firebase Auth仅在刷新后才能工作?

时间:2019-04-08 02:02:01

标签: firebase firebase-authentication vuex

我正在使用Firebase的signInWithEmailAndPassword函数进行身份验证,然后将access_token保存在localStorage中,以便我构建的Vuex吸气剂检测到用户已登录,最后我进行了路由器转到路由器中具有requiresAuth: true的Vue组件。

但是,它不起作用,因为显然只有在刷新页面后才会更改loginIn getter。

我已经正确构建了我的注册和注销功能,但是尽管使用了相同的代码结构,但该函数似乎无法正常工作: -调用firebase的身份验证功能 -然后调用一个内部包含路由器重定向的Promise -最后(在Promise之外)进行查询(如果适用)(注册时将用户添加到数据库中)。

我最接近的是使用这种稍微不同的结构:

login () {
  firebase.auth().signInWithEmailAndPassword(this.username, this.password).catch(function(error) {
  // Handle Errors here.
  alert(error.code);
  alert(error.message);

  // ...

});
let token = (firebase.auth().currentUser.refreshToken)
localStorage.setItem('access_token', token)
console.log('firebase token: ', token)
this.$router.push({ name: 'home' })
}

我期望的是我被重定向到需要身份验证的组件。在刷新并单击“主页”按钮(要求loggedIn为真)后,即可完成此操作。

如何在不刷新的情况下使它工作?

1 个答案:

答案 0 :(得分:0)

要检测用户身份验证状态的变化,请使用docs中所示的onAuthStateChanged侦听器:

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in.
  } else {
    // No user is signed in.
  }
});

此回调将在用户的明确登录完成时以及页面重新加载时触发。