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 不是函数

在哪里放置 firebase.auth().onAuthStateChanged()

使用 useEffect 与 onAuthStateChanged 检测 Firebase 用户更改 - 有啥区别?