Quasar 2.2.2、Vue 3 和 Firebase:如何从路由器访问 GlobalProperties

Posted

技术标签:

【中文标题】Quasar 2.2.2、Vue 3 和 Firebase:如何从路由器访问 GlobalProperties【英文标题】:Quasar 2.2.2, Vue 3 and Firebase: how to access GlobalProperties from router 【发布时间】:2021-12-17 03:35:10 【问题描述】:

我第一次在我的 Quasar 应用程序中实施 Firebase(使用 Vue 3)。我创建了启动文件 firebase.js,这是它​​的内容:

import  boot  from 'quasar/wrappers'
import  initializeApp  from 'firebase/app';
import  getAnalytics  from "firebase/analytics";

// "async" is optional;
// more info on params: https://v2.quasar.dev/quasar-cli/boot-files
const firebaseConfig = 
  apiKey: 'XXX',
  authDomain: 'XXX',
  projectId: 'XXX',
  storageBucket: 'XXX',
  messagingSenderId: 'XXX',
  appId: 'XXX',
  measurementId: 'XXX'
;

const firebaseApp = initializeApp(firebaseConfig);
const analyticsApp = getAnalytics(firebaseApp);

 firebaseApp.getCurrentUser = () => 
    return new Promise((resolve, reject) => 
      const unsubscribe = firebaseApp.auth().onAuthStateChanged(user => 
        unsubscribe();
        resolve(user);
      , reject);
    )
  ;

export default boot(( app ) => 
  app.config.globalProperties.$firebase = firebaseApp;
  app.config.globalProperties.$analytics = analyticsApp;
)

初始化似乎工作正常。现在我必须向我的 index.ts 添加一个函数,该函数位于路由器目录中,允许我在用户未通过身份验证时重定向到特定页面。

 Router.beforeEach(async (to, from, next) => 
    const auth = to.meta.requiresAuth
    if (auth && !await $firebase.getCurrentUser()) 
      next('/');
     else 
      next();
    
  )

$firebase 必须引用 globalproperties 项。但无论我更改了什么,我都无法访问该属性。

你能帮帮我吗?

罗伯托

【问题讨论】:

【参考方案1】:

仔细查看 Quasar 文档,我已经在 firebase.js 文件中进行了所有更改,现在是这样的。

/* eslint-disable */
import  boot  from 'quasar/wrappers'
import  initializeApp  from 'firebase/app';
import  getAnalytics  from "firebase/analytics";

const firebaseConfig = 
  apiKey: 'XXX',
  authDomain: 'XXX',
  projectId: 'XXX',
  storageBucket: 'XXX',
  messagingSenderId: 'XXX',
  appId: 'XXX',
  measurementId: 'XXX'
;

const firebase = initializeApp(firebaseConfig);
const analytics = getAnalytics(firebase);

 firebase.getCurrentUser = () => 
    return new Promise((resolve, reject) => 
      const unsubscribe = firebase.auth().onAuthStateChanged(user => 
        unsubscribe();
        resolve(user);
      , reject);
    )
  ;

export default boot(( app, router, store ) => 
  app.config.globalProperties.$firebase = firebase;
  app.config.globalProperties.$analytics = analytics;

  router.beforeEach(async (to, from, next) => 
    const auth = to.meta.requiresAuth
    if (auth && !await firebase.getCurrentUser()) 
      next('/');
     else 
      next();
    
  )
)

export  firebase, analytics ;

基本上我已经更改了导出引导子句,添加了路由器并存储在其中,并且我在子句中添加了 router.beforeEach。

我已经创建了一个调试会话,并且每次发生路由更改时都会调用该函数。

罗伯托

【讨论】:

以上是关于Quasar 2.2.2、Vue 3 和 Firebase:如何从路由器访问 GlobalProperties的主要内容,如果未能解决你的问题,请参考以下文章

在将 quasar 升级到 vue 2 到 vue 3 时,找不到 core-js/modules/es.typed-array.at.js 依赖项

如何将来自 Mongoose 的 JSON 映射到 Vue 和 Quasar?

vue 组件库 ant-design、quasar、element-ui 按需加载和主题重置

Vue/Quasar 和 Capacitor 应用程序的 Auth0 回调 URL

「免费开源」基于Vue和Quasar的前端SPA项目crudapi后台管理系统实战之文件上传

在云 Firebase 中显示下拉 Vue js 和 quasar