Vue项目中动态路由与权限控制:router.beforeEach的使用及无token重定向登录页

news/2024/10/31 15:49:06/

在现代前端项目中,权限控制是一个非常重要的环节。Vue Router作为Vue官方的路由管理器,为我们提供了强大的路由管理功能。在本文中,我们将探讨如何在Vue项目中使用router.beforeEach钩子函数来实现动态路由权限控制,并在用户未登录时自动重定向到登录页。

步骤一:登录并获取Token

首先,确保用户登录成功后,能够获取到token,并将token存储在Vuex或localStorage中。

javascript">// 假设登录方法
methods: {async login() {const response = await this.$http.post('/api/login', this.loginForm);const { token } = response.data;// 存储tokenthis.$store.commit('setToken', token);// 获取权限路由并动态添加this.getPermissionRoutes(token);// 登录成功后重定向到首页或其他页面this.$router.push({ path: this.$route.query.redirect || '/' });}
}

步骤二:请求后端权限路由接口

在登录方法中,或者在router.beforeEach中,如果检测到用户已经登录但没有添加权限路由,则请求后端接口获取权限路由。

javascript">// 假设的获取权限路由方法
async getPermissionRoutes(token) {const response = await this.$http.get('/api/permission_routes', {headers: {Authorization: `Bearer ${token}`}});const permissionRoutes = response.data.routes;// 动态添加路由this.addRoutes(permissionRoutes);
}

步骤三:动态添加路由

将后端返回的路由数据动态添加到路由配置中。

javascript">// 动态添加路由的方法
addRoutes(routes) {routes.forEach(route => {// 使用router.addRoute方法添加单个路由this.$router.addRoute(route);});
}

注意如果你使用的是vue2,那么你可能需要使用this.$rouer.addRoutes() 

步骤四:修改router.beforeEach

在router.beforeEach中,我们需要检查是否已经添加了权限路由,如果没有,则调用获取权限路由的方法。

javascript">router.beforeEach((to, from, next) => {// 判断是否需要登录权限if (to.matched.some(record => record.meta.requiresAuth)) {// 检查token是否存在const token = store.getters.token;if (token) {// 检查是否已经添加了权限路由if (!store.getters.isPermissionRoutesAdded) {// 获取权限路由并动态添加store.dispatch('getPermissionRoutes', token).then(() => {// 设置状态,表示权限路由已添加store.commit('setPermissionRoutesAdded', true);// 继续路由跳转next({ ...to, replace: true });}).catch(() => {// 获取权限路由失败,可以重定向到登录页或其他错误处理next('/login');});} else {next();}} else {// 没有token,重定向到登录页next({path: '/login',query: { redirect: to.fullPath }});}} else {next();}
});

步骤五:在Vuex中管理状态

在Vuex中,我们需要管理权限路由是否已经添加的状态。

javascript">// Vuex store
const store = new Vuex.Store({state: {token: null,isPermissionRoutesAdded: false},mutations: {setToken(state, token) {state.token = token;},setPermissionRoutesAdded(state, value) {state.isPermissionRoutesAdded = value;}},actions: {getPermissionRoutes({ commit, state }) {// 调用上面的getPermissionRoutes方法}},getters: {token: state => state.token,isPermissionRoutesAdded: state => state.isPermissionRoutesAdded}
});

通过以上步骤,我们就可以在Vue项目中实现由后端动态提供权限路由,并在用户没有token时重定向到登录页的功能。 

 

 

 

 

 

 


http://www.ppmy.cn/news/1543374.html

相关文章

【网络原理】——图解HTTPS如何加密(通俗简单易懂)

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:HTTP为什么不安全 二:HTTPS加密过程 1:密码学中的概念 &…

【缓存与加速技术实践】Redis 高可用

文章目录 Redis 高可用1. 持久化2. 主从复制3. 哨兵(Sentinel)4. Cluster集群持久化持久化的方式RDB 持久化触发条件执行流程启动时加载 AOF 持久化开启 AOF执行流程启动时加载 RDB 和 AOF 的优缺点 redis性能管理查看 Redis 内存使用内存碎片率内存使用…

C# .NET最小API?

在.NET 5/6中,你可以使用最小API来创建高性能的HTTP API。最小API提供了一种更轻量级的构建API的方式,它允许你直接在Program.cs文件中定义路由和处理程序,而不需要使用传统的MVC控制器。 什么是最小API? 最小API是一个用于构建HT…

【测试平台】Ewomail 邮件服务器搭建

一、邮件服务器背景介绍 背景介绍 使用的是开源的Ewomail邮件服务器,方便QA同学在进行业务测试时,通过测试平台自动注册邮件新账号, 减少手工注册的操作。前端页面调用的底层注册邮箱就是我们即将搭建的邮件服务器。 服务访问关系 前端 -&…

数学建模汇总

模型汇总 数学建模算法汇总 数据分析 数据的统计描述和分析 数据处理 用Python进行数据挖掘(数据预处理) Python机器学习库SKLearn:数据预处理 在Python中进行数据清洗和预处理缺失值处理缺失值补全 灵敏度分析 研究与分析一个系统&…

webpack5搭建react脚手架详细步骤

1. 初始化项目 首先,创建一个新目录并初始化项目: bash mkdir create-react cd create-react pnpm init --y git init 这里使用pnpm作为包管理工具,因为它在处理依赖和速度上表现更好。 2. 安装React和TypeScript 安装React和React-DOM…

[实战-11] FlinkSql设置时区(table.local-time-zone)

table.local-time-zone table.local-time-zone代码测试flink代码执行结果截图1. Asia/Shanghai 结果如下2. UTC结果如下 table.local-time-zone 设置flink程序运行期间得时区,flink的内置数据类型TIMESTAMP(3), 我们设置水位线都是基于TIMESTAMP(3)类型…

seurat对象内部结构

10x Genomics格式: barcodes.tsv 、features/genes.tsv和matrix.mtx文件 是10X Genomics单细胞转录组测序数据的标准文件格式。这些文件通常存储在一个目录中,可以使用Read10X函数从R语言中读取。 barcodes.tsv:包含了每个单细胞的条形码信息…