我正在使用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
为真)后,即可完成此操作。
如何在不刷新的情况下使它工作?
答案 0 :(得分:0)
要检测用户身份验证状态的变化,请使用docs中所示的onAuthStateChanged
侦听器:
firebase.auth().onAuthStateChanged(function(user) { if (user) { // User is signed in. } else { // No user is signed in. } });
此回调将在用户的明确登录完成时以及页面重新加载时触发。