firebase - Vue应用程序中的Firebase登录页面刷新
问题描述
我正在使用 firebase 作为后端构建一个 vue.js 应用程序。我已经设置了身份验证和路由保护。我还将会话的持久性设置为 firebase.persistance.LOCAL 但是,每当我刷新页面、关闭选项卡或浏览器并返回时,我都会被重定向到登录页面。
这是我的火力基地配置:
import * as firebase from "firebase";
var firebaseConfig = {
....
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
export const auth = firebase.auth();
export const firestore = firebase.firestore();
export const storage = firebase.storage();
这是我登录用户的方式:
auth.setPersistence(firebase.auth.Auth.Persistence.LOCAL)
.then(function() {
auth
.signInWithEmailAndPassword(self.email, self.password)
.then(function() {
self.$router.push("/management");
})
.catch(function(error) {
self.errors = error;
document.getElementById("signInLoader").style.display =
"none";
});
})
.catch(function(error) {
self.errors = error;
document.getElementById("signInLoader").style.display =
"none";
});
这是我的路线守卫:
import { auth } from "@/firebase/firebase.js";
Vue.use(VueSpinners);
Vue.config.productionTip = false;
router.beforeEach((to, from, next) => {
const currentUser = auth.currentUser;
const requiresAuth = to.matched.some(record => record.meta.requiresAuth);
if (requiresAuth && !currentUser) {
next("/signin");
} else if (requiresAuth && currentUser) {
next();
} else {
next();
}
});
new Vue({
store,
router,
render: h => h(App)
}).$mount("#app");
解决方案
我更改了 routeguard 以监视身份验证初始化,然后检查 currentUser。
router.beforeEach((to, from, next) => {
auth.onAuthStateChanged(function(user) {
const requiresAuth = to.matched.some(record => record.meta.requiresAuth);
if (!requiresAuth) {
next()
} else if (requiresAuth && user) {
next()
} else {
next("/signin");
}
});
});
推荐阅读
- mongodb - 在没有 localField 的情况下检索 MongoDB 中的相关对象
- django - 如何在 Django 中使用连接查询?
- amazon-web-services - 如何配置 VPC 终端节点以使用 Terraform 访问 DynamoDB?
- stripe-payments - Stripe:切换计划后如何继续剩余试用期
- react-native - 使 OkHttp 和 react-native android 应用程序中已建立的 SSL 连接无效
- python - 选择与键对应的字典值
- c# - 泛型类型参数作为类型参数并在 C# 的功能之一中新建泛型类型
- mysql - 带有 mysql 和 django 的 Docker。尽管有任何尝试,都拒绝连接到 mysql
- google-maps - 如何以所选语言获取谷歌地图 AutocompleteService 结果?
- elasticsearch - 如何在搜索时对弹性搜索中的字段执行数学运算?