firebase onAuthStateChanged&Navigation Guards的模式 - Quasar应用程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了firebase onAuthStateChanged&Navigation Guards的模式 - Quasar应用程序相关的知识,希望对你有一定的参考价值。
我在Quasar应用程序中遇到了有关浏览器刷新和firebase身份验证的问题。
用户登录然后单击浏览器刷新后,firebase.auth()。currentUser将返回null(因为它以异步方式执行)。这意味着当执行beforeEach时,currentUser为null,并且系统会提示用户使用登录页面。但是我看到,当调用onAuthStateChanged的回调时,用户正确设置。
在Quasar应用程序中,是否有任何模式可以在导航过程中使用onAuthStateChanged,以便重用现有的用户会话?
// Vue router => index.js
firebase.auth().onAuthStateChanged(user => {
console.log('onAuthStateChanged Invoked => ' + user);
});
router.beforeEach((to, from, next) => {
let currentUser = firebase.auth().currentUser;
let requiresAuth = to.matched.some(record => record.meta.requiresAuth);
if (requiresAuth && !currentUser) {
next('signin');
} else {
if (requiresAuth && currentUser.emailVerified === false) {
next('signin');
} else {
next();
}
}
});
在你的main.js
,你应该听onAuthStateChange
。
import Vue from 'vue'
import App from './App'
import router from './router'
import firebase from 'firebase'
Vue.config.productionTip = false
let app;
let config = {
apiKey: "YOUR_API_KEY",
authDomain: "YOUR_PROJECT_ID.firebaseapp.com",
databaseURL: "https://YOUR_PROJECT_ID.firebaseio.com",
projectId: "YOUR_PROJECT_ID",
storageBucket: "YOUR_PROJECT_ID.appspot.com",
messagingSenderId: "YOUR_MESSAGING_SEND_ID"
};
firebase.initializeApp(config)
firebase.auth().onAuthStateChanged(function(user) {
if (!app) {
/* eslint-disable no-new */
app = new Vue({
el: '#app',
template: '<App/>',
components: { App },
router
})
}
});
我们只在确定Firebase Auth对象可以使用时才初始化应用。
以上是关于firebase onAuthStateChanged&Navigation Guards的模式 - Quasar应用程序的主要内容,如果未能解决你的问题,请参考以下文章
firebase.auth().onAuthStateChanged 不工作
如何从 firebase.auth().onAuthStateChanged 中提取数据
.onAuthStateChanged 方法是不是计入 Firebase 身份验证验证?
TypeError: firebase.auth(...).onAuthStateChanged 不是函数