使用 Vue-router 进行 Firebase 身份验证检查

2024-01-02

问题是 vue-router 的 beforeEnter 比 main.js 中的 beforeCreate 钩子更早触发,并且有第二个延迟,而在重新加载 vuex 操作后将用户设置为状态。这会导致用户被弹回登录页面。

如何延迟 vue-router 的 beforeEnter 检查,直到 vuex 将授权用户设置为状态。

路由器.js

import Vue from 'vue'
import Router from 'vue-router'
import Home from '../views/Home.vue'
import auth from './auth'

Vue.use(Router)

export default new Router({
  mode: 'history',
  routes: [
    {
      path: '/',
      name: 'home',
      component: Home
    },
    {
      path: '/reservations',
      name: 'Reservations',
      component: () => import('@/views/Reservation/Reservations.vue'),
      beforeEnter: auth
    }
  ]
})

auth.js

import { store } from "../store";

export default (to, from, next) => {
    if(store.getters.user) {
        next()
    } else {
        console.log('auth')
        next('/signin')
    }
}

main.js

import Vue from 'vue'
import App from './App.vue'
import router from './router/router'
import {store} from './store'
import firebase from 'firebase/app'
import 'firebase/app'    
import config from './config'    
    
new Vue({
  router,
  store,
    render: h => h(App),
    beforeCreate() {
        firebase.initializeApp(config).firestore().settings({timestampsInSnapshots: true})
        console.log('main')     
        this.$store.dispatch('authCheck')   
    }
}).$mount('#app')

商店/user.js

import firebase from 'firebase/app'
import 'firebase/auth'

export default{
    state: {
        user: null
    },
    mutations: {
        setUser (state, payload) {
      state.user = payload
        }       
  },
    actions: {
        authCheck({ commit }) {
            commit('setLoading', true)
            firebase.auth().onAuthStateChanged((user) => {              
                if(user){
                    commit('setUser', {
                        id: user.uid,
                        name: user.displayName,
                        email: user.email
                    })
                    commit('setLoading', false)
                }
            })
        },      
        logout({commit}) {
            firebase.auth().signOut()
            commit('setUser', null)
        }
    },
    getters: {
        user (state) {
            return state.user
        }
    }
}

在控制台中,我首先看到 beforeEnter 检查中的“auth”,然后是 beforeCreate 中的“main”。如何在路由器检查之前触发“authCheck”


在您的 auth.js 文件中,您应该等待,而不是监视商店authStateChanged事件,然后当您从 firebase 收到用户时进行处理。

auth.js

export default (to, from, next) => {
  firebase.auth().onAuthStateChanged(function (user) {       
    if (user)         
      next();        
    else          
      next('/signin');        
  });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Vue-router 进行 Firebase 身份验证检查 的相关文章

  • 如何使用 Python 通过 Firebase 的 Lambda 发送推送通知

    我正在尝试通过 AWS Lambda 从 Firebase Cloud Message 发送推送通知 API 响应授权错误 导入请求 导入 json def lambda handler event context message even
  • 角度+ firebase auth +材料=路由器崩溃

    Firebase 身份验证后路由器无法正常工作 问题来自 angular animations 导入 NoopAnimationsModule 或 BrowserAnimationsModule 路由器无法正常工作 包 json depen
  • 如何在 Vue.js 2 中使用事件总线通过自定义事件传递数据

    我在用着Vue js 2 5 x 在我的玩具项目中 我实现了一个事件总线 类似于所示的here https alligator io vuejs global event bus 事件总线在 Vue 原型中全局注册为 eventBus 然后
  • Firebase 上的域名验证

    我使用 Firebase 数据库和托管开发了一个应用程序 并且在 names co uk 上购买了域名 2 天前 我已按照 Firebase 的要求添加了两条 TXT 记录 但此消息仍然显示 Current Status The TXT R
  • Google Cloud Build - firebase 部署错误:“公共目录‘dist/browser’不存在,无法将托管部署到站点 PROJECT-ID”

    我正在尝试将我的 Angular Universal Web 应用程序同时部署到 Cloud Run 用于 SSR 和 Firebase Hosting 用于缓存 Cloud Run 的部署工作正常 我遵循了本指南 https cloud
  • Firebase 回调 - 底层触发器是什么?

    据我所知 在 Firebase 中我可以使用 on 方法注册我的页面以进行回调 根据他们的文档 on 用于监听特定位置的数据更改 这是从 Firebase 读取数据的主要方式 firebaseRef on value function da
  • 如何在 Nrwl Nx 中集成 firebase

    我真的很想将 firebase 以及 firebase cli 集成到 Nx 中的应用程序中 但不知道如何实现 我使用 firebase 函数 托管 cli tools 等 理想情况下 我希望能够使用 firebase cli 部署用于托管
  • 从 firebase swift 读取数据

    我正在尝试从 firebase 数据库检索数据 但是当我运行代码时 它没有显示任何内容 但没有显示错误 我从Firebase手册中得到了这段代码 顺便说一句 我很确定路径是正确的 let ref FIRDatabase database r
  • 存储 FCM 的令牌

    我正在尝试将我的令牌存储在我的云数据库中 我稍后将在云函数中使用此令牌 以便向已添加为好友的用户发送通知 然而 推送设备令牌不起作用 因为用户未经授权 授权后我无法保存它 因为令牌是在安装应用程序时生成的 private static fi
  • 用户的 RecyclerView 为空

    我试图使用 Firebase 实时数据库在 RecyclerView 中向用户显示主键 但每次我尝试 RecyclerView 都是空的 我尝试了很多教程 但似乎没有任何帮助 这是我的数据库的样子 这是我使用 RecyclerView 的类
  • 适用于 iOS 的 Firebase 云消息通知未显示打开和分析

    我正在使用 FCM 向 iOS 应用程序发送通知 设备上可以很好地接收通知 但我无法在通知控制台 GUI 中获取 打开 或 转化 率 对于发送的近 200 0000 条通知 它始终显示 0 个打开 和 0 个转化 我仔细检查了所有的实现 但
  • 找不到模块:错误:包路径。未从包中导出

    import firebase from firebase const firebaseConfig apiKey AIzaSyBOK7x5N5UnjY4TDqndzH7l5tvdNIsWFRc authDomain todo app e3
  • Firebase 实时数据库 .info/connected 本应为 True 时为 False

    我有一个 Android 服务 它的调用地址为onCreate FirebaseDatabase database FirebaseDatabase getInstance database getReference info connec
  • Firestore onSnapshot() 方法多次触发

    我有一个带有多个路由和 vuex 的 vue cli 4 应用程序 Firestore 数据库已成功连接 我的应用程序立即反映从 Firestore 控制台应用于数据库的修改 在离开包含与 Firestore 同步 的组件的路线然后返回后
  • 在 Mac 上哪里可以找到 .firebaserc 文件?

    我是编程新手 也是 firebase 新手 我一直在尝试编写firebase云功能 我在开发环境中成功测试了它 现在我尝试在生产环境中部署 就我而言 两者是不同的情况 我尝试重新初始化 firebase 认为它会要求我将 index js
  • 反应/Firebase。如何在项目中保存更新的数据?

    当我尝试更改数据时 更改正在进入我的 Firestore 数据库 没关系 但是当我重新加载页面或注销并尝试再次登录时 用户数据不会出现在我的项目中 但也会出现存储在我的Firestore Database 即使重新加载页面后 如何保存并显示
  • Stripe 创建使用记录错误 - 时间戳必须早于订阅的当前周期结束时间 - Date.now()?

    我正在尝试为按计量计划的客户创建条带使用记录 当我在请求中使用时间戳 Date now 时 我收到的错误是 无法使用此时间戳创建使用记录 因为时间戳必须早于订阅的当前周期结束时间 这似乎是不言自明的 但考虑到订阅的当前周期结束时间还剩 14
  • stripe.redirectToCheckout 参数:价格不是可接受的参数反应

    我在反应中的条纹结帐上遇到错误 我有一个按钮 单击它时 它应该重定向到条纹结帐页面 但是 我收到错误 Uncaught in promise IntegrationError Invalid stripe redirectToCheckou
  • 为 Firebase 项目中的成员分配角色

    我通过控制台在我的 Firebase 项目中添加具有 项目编辑器 角色的成员 该角色具有文档中的所有查看权限 但通过以会员身份登录 我无法看到分析 我尝试将角色更改为 项目所有者 但分析仍然不可见 我是第一次使用 Firebase 并且对角
  • Firebase获取孩子ID swift ios

    我的 Firebase 看起来像这样 贝娄Active Orders看来childs根据他们的不同有不同的名字UID 用户身份 这是我的代码 用于获取孩子的 ID 无论孩子的名字是什么 但它似乎根本不起作用 获得的正确方法是什么child

随机推荐

  • 计算日期差(以周为单位)(Javascript)

    我有两个字符串 1387050870 and 2012 12 15 我如何计算这两个日期之间的差异 以周为单位 52 I tried Math round 1387050870 Math round new Date 2012 12 15
  • ActiveRecord:查询未对 STI 子类使用正确的类型条件

    我有一组 STI 子类继承自User基类 我发现在子类定义内的某些条件下 对子类的查询不能正确使用type健康 状况 class User lt ActiveRecord Base end class Admin lt User Rails
  • 获取 PostgreSQL 中受 UPDATE 影响的行数

    SO 和许多博客上都提出了这个问题的各种变体 但没有一个提供直接的答案 我希望有一个 我正在更新 PostgreSQL 9 0 来自 CodeIgniter PHP 框架 sql order UPDATE meters SET billed
  • C++ 错误:抛出“std::bad_alloc”实例后调用终止

    我编写了下面粘贴的代码 以按照说明的顺序执行以下任务 读取输入文件并计算其中的条目数 创建适当大小的数组 大小等于条目数 返回到输入文件的开头并再次读取 将条目存储在数组中 打印出文件中的条目数以及条目本身 这是我的代码 include
  • 什么触发(或生成)KeyEvent.ACTION_MULTIPLE?

    的文档KeyEvent ACTION MULTIPLE http developer android com reference android view KeyEvent html ACTION MULTIPLE says 连续发生多个重
  • mysql 多个或不喜欢

    我有一个 wordpress 插件 它本质上创建一个 mysql 查询并将结果返回到 wordpress 它是用户驱动的 因此最终可能会出现带有多个 NOT LIKE 的大型查询 从而导致查询非常慢 我可以用来改进的任何建议 SELECT
  • 在 IIS 6 上的 WCF REST Api 上启用 PUT(无 .svc 文件)

    在 IIS 6 上 如何允许 WCF Rest API 上的 PUT 操作 由于我没有 svc 文件 我在 global asax 上向服务类添加了一条路由 因此我无法允许在 IIS 6 上对 svc 扩展名进行 put 操作 打开IIS管
  • 如何找到标签等于字符串变量的树视图节点?

    首先 我想感谢所有花时间查看此帖子并尝试提供帮助的人 我在互联网上搜索过 但找不到选择标签文本与字符串变量的文本相同的树视图节点的示例 在 MSDN 上我找到了消息 TVM GETISEARCHSTRING 但我不知道它是否可以用来解决我的
  • Matlab:使用矩阵运算代替for循环

    在 Matlab 中是否可以仅使用矩阵运算来创建 NxN 矩阵 Mat 就像下面的两个 foor 循环所做的那样 Mat zeros N for row 1 N for col 1 N if row 1 1 lt col col lt N
  • SIFT和SURF特征提取使用MATLAB实现

    我正在使用matlab做一个古钱币识别系统 到目前为止我所做的是 转换为灰度 使用高斯滤波器去除噪声 对比度增强 使用 canny 边缘检测器进行边缘检测 现在我想提取特征进行分类 我想选择的特征是圆度 面积 颜色 SIFT 和 SURF
  • Rails attr_accessible 不适用于 :type?

    我尝试在表单中设置单表继承模型类型 所以我有一个属性选择菜单 类型 值是 STI 子类的名称 问题是错误日志不断打印 警告 无法批量分配这些受保护的属性 类型 所以我将 attr accessible type 添加到模型中 class C
  • JVM_FindSignal函数不断分配本机内存

    我部署在 Linux 机器上的 tomcat8 中的 java Web 应用程序一直在泄漏本机内存 我尝试使用 jemalloc 分析来检测泄漏源 如下所述 https github com jeffgriffith native jvm
  • 锁屏下追踪加速度计

    是否可以在锁定屏幕下跟踪加速度计值 我设法编写了一个简单的应用程序 它使用计时器从 1 计数到 100 该计时器触发一个事件 在该事件上我递增计数器 但是 当我为加速度计的 ReadingChanged 事件注册一个处理程序时 一旦屏幕锁定
  • 在 ASP.NET MVC DisplayFor Html Helper 中显示空值“NULL”

    有没有办法获得 Html DisplayFor如果模型项的值为 则在视图中显示 NULL 的值null 以下是我当前正在处理的 详细信息 视图中的某个项目的示例 现在 如果 描述 的值为 不显示任何内容 null div class dis
  • ehcache 持久化到磁盘问题

    我想用 Java 中的 ehcache 做一些我认为应该非常简单的事情 但我已经花了足够的时间让自己对文档感到沮丧 将值写入磁盘持久缓存 关闭 再次启动并读取该值 这是我的 Java 函数 private static void testC
  • Webpack + Express + EJS:错误:找不到模块“。”

    我正在使用 webpack typescript 和 ejs 编写一个 Express Web 应用程序 当点击应该提供 ejs 文件的路由之一时 我收到以下错误 Error Cannot find module at webpackMis
  • ActiveSync 客户端 Java 实现

    我的公司正在开发一个桌面和移动电子邮件客户端项目 该客户端可以通过用户或服务器管理员的最少配置连接到不同的邮件服务器 由于我们想要支持 Microsoft Exchange 因此我们似乎必须在 Java 中实现 ActiveSync 协议
  • 使用电话号码格式 NaN 屏蔽 EditText,就像 PhoneNumberUtils 中一样

    我想让用户在 editText 中输入电话号码 以便每次用户输入号码时动态更改格式 也就是说 当用户输入最多 4 位数字 例如 7144 时 editText 显示 714 4 我希望每当用户输入数字时 editText 就会动态更新为格式
  • HashLocationStrategy 在路由时不生成 # 个位置?

    我正在运行 Angular 2 beta 0 并且正在搞乱路由 这是我所拥有的 应用程序组件 import Component provide from angular2 core import bootstrap from angular
  • 使用 Vue-router 进行 Firebase 身份验证检查

    问题是 vue router 的 beforeEnter 比 main js 中的 beforeCreate 钩子更早触发 并且有第二个延迟 而在重新加载 vuex 操作后将用户设置为状态 这会导致用户被弹回登录页面 如何延迟 vue ro