Vue项目实战:基于用户身份的动态路由管理

🌟 前言

欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍

  • 🤖 洛可可白:个人主页

  • 🔥 个人专栏:✅前端技术 ✅后端技术

  • 🏠 个人博客:洛可可白博客

  • 🐱 代码获取:bestwishes0203

  • 📷 封面壁纸:洛可可白wallpaper

在这里插入图片描述

文章目录

  • Vue项目实战:基于用户身份的动态路由管理
    • 动态路由的基本概念
    • 实现基于用户身份的动态路由
      • 1. 配置基础路由
      • 2. 用户身份验证模块
      • 3. 导航守卫
      • 4. 登录组件逻辑
    • 结语
    • 🎉 往期精彩回顾

Vue项目实战:基于用户身份的动态路由管理

在前后端分离项目中,根据不同用户的身份展示不同的路由和页面是一项常见的需求。Vue.js结合vue-router提供了强大的路由管理能力,允许我们根据后端接口的返回数据动态地添加和控制路由。本文将介绍如何在Vue项目中实现基于用户身份的动态路由管理,以及如何利用Vue的module模块来加载这些路由。

动态路由的基本概念

动态路由不仅指路径参数会变化的路由,还可以根据应用程序的运行时状态来动态添加或修改。在Vue中,这通常是通过vue-router的addRoute方法来实现的。

实现基于用户身份的动态路由

1. 配置基础路由

首先,在router.jsrouter/index.js文件中配置基础路由,这些路由是所有用户都能访问的。

import { createRouter, createWebHistory } from 'vue-router'
import Home from '../components/Home.vue'
import Login from '../components/Login.vue'
import Dashboard from '../components/Dashboard.vue'const routes = [{path: '/',component: Home},{path: '/login',component: Login},{path: '/dashboard',component: Dashboard,meta: { requiresAuth: true } // 标记需要身份验证的路由}
]const router = createRouter({history: createWebHistory(),routes
})

2. 用户身份验证模块

在Vue的module模块中处理用户身份验证逻辑。这通常涉及到与后端接口的交互,获取用户的登录状态和可访问的路由信息。

// store/auth.js
import { defineStore } from 'pinia'
const modules = import.meta.glob("../views/**/**.vue");export const useAuthStore = defineStore('auth', {state: () => ({isAuthenticated: false,routes: []}),actions: {async login({ userId, routes }) {this.isAuthenticated = true;this.routes = routes;// 动态添加路由this.addRoutes(routes);},logout() {this.isAuthenticated = false;this.routes = [];// 清除动态添加的路由this.removeRoutes();}},methods: {addRoutes(newRoutes) {newRoutes.forEach(route => {router.addRoute(this.createRoute(route));});},removeRoutes() {this.routes.forEach(route => {const routeRecord = router.getRoute(route.name);if (routeRecord) {router.removeRoute(routeRecord);}});},createRoute(config) {return {path: config.path,component: modules[`../components/${config.component}.vue`],meta: { requiresAuth: true }};}}
})

3. 导航守卫

使用vue-router的导航守卫来检查用户是否有权限访问某个路由。

router.beforeEach((to, from, next) => {if (to.matched.some(record => record.meta.requiresAuth)) {if (useAuthStore().isAuthenticated) {next();} else {next('/login');}} else {next();}
})

4. 登录组件逻辑

在登录组件中调用身份验证模块的login方法,传入用户信息和可访问的路由。

// components/Login.vue
<template><!-- 登录表单 -->
</template><script>
import { useAuthStore } from '../store/auth'export default {methods: {async onLogin() {// 假设这是从后端接口获取的用户信息和路由const userInfo = { userId: '123', routes: [{ path: '/dashboard', component: 'Dashboard' }]}const authStore = useAuthStore();await authStore.login(userInfo.userId, userInfo.routes);}}
}
</script>

结语

通过上述步骤,我们可以实现一个基于用户身份的动态路由管理系统。这种系统可以根据用户的登录状态和权限动态地添加和移除路由,确保用户只能访问他们被授权的页面。使用Vue的module模块和vue-router的addRoute方法,我们可以灵活地管理应用程序的路由结构,同时保持代码的清晰和可维护性。这种方法在构建企业级应用时尤其有用,因为它可以帮助我们实现复杂的权限控制和路由管理。

如果对你有帮助,点赞👍、收藏💖、关注🔔是我更新的动力!👋🌟🚀

🎉 往期精彩回顾

Windows Edge 兼容性问题修复:提升用户体验的关键步骤
Vue2和Vue3组件通信:父子与兄弟间的桥梁
无缝集成:使用Spring Boot和Vue实现头像上传与回显功能
前端开发全景指南:语言与框架的精粹
C语言开发实战:使用EasyX在Visual Studio 2022中创建井字棋游戏
前端与后端协同:实现Excel导入导出功能
Java日期格式化:掌握时间的艺术
正则表达式完全指南:语法、用法及JavaScript实例
正则表达式与JSON序列化:去除JavaScript对象中的下划线键名
探索async/await的魔力:简化JavaScript异步编程
JavaScript日期格式化:从原始值到用户友好的字符串
入门教程:Windows搭建C语言和EasyX开发环境
CentOS系统下Docker的安装教程
Spring Boot单元测试全指南:使用Mockito和AssertJ
Yarn简介及Windows安装与使用指南
H5实现3D旋转照片墙教程
Element-Plus 实现动态渲染图标教程
MyBatis-Plus分页接口实现教程:Spring Boot中如何编写分页查询

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/816563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【动态规划】【背包问题】

1.确定dp数组含义&#xff0c;初始化 2.确定遍历顺序 3.确定dp公式 ‘’‘’ 0-1背包问题&#xff0c;可以分为二维dp和一维dp 有两种状态&#xff0c;当前物品放还是不放入背包 0-1背包&#xff0c;物品只能放一次&#xff0c;因此一维dp要考虑遍历顺序 ‘’’ class solu…

后端返回树结构

出参结构 Getter Setter public class TreeResponse implements Serializable {// 主键private Long id;// 父级节点private Long parentId;// 层级private Byte layer;// 编码private String docCode;// 名称private String docName;// 子节点private List<TreeResponse&g…

yolov5 获取错误样本

yolov5根据把预测错误的样本找出来,并把预测结果打印出来,输出图片 标注时,标注的结果就显示出来了,红框是预测的结果,其他颜色是标注的结果,可以根据结果对比进行调整标注。 注意:标注时独立的json文件格式 batch_mouse_ok.py """ Usage:$ python pa…

如何安装MacOS的虚拟机?mac安装虚拟机的步骤 虚拟机安装MacOS VMware Fusion和Parallels Desktop19

要在Mac上运行MacOS的虚拟机&#xff0c;常用的方法是使用虚拟化软件如VMware Fusion或Parallels Desktop。 以下是安装MacOS的虚拟机的主要步骤&#xff1a; 1. 检查系统要求&#xff1a;确定您的Mac硬件和操作系统满足安装要求。您需要一台具备足够性能的Mac&#xff0c;并…

223 基于matlab的结构有限元分析

基于matlab的结构有限元分析。包括基于4节点四面体单元的空间块体分析、基于4节点四边形单元的矩形薄板分析、基于3节点三角形单元的矩形薄板分析、三梁平面框架结构的有限元分析、四杆桁架结构的有限元分析、基于8节点六面体单元的空间块体分析。每个程序都要相应的文档说明。…

设计模式之策略模式例题:根据用户等级算积分的接口

问题 问题&#xff1a;写一个根据游戏用户等级来送赠送积分的方法接口&#xff0c;一共有100个等级&#xff0c;每种等级都有一个方法&#xff0c;使用策略模式。 在设计一个根据游戏用户等级来赠送积分的接口时&#xff0c;我们需要考虑几个关键点&#xff1a; 解决 性能&a…

spring-cloud-alibaba微服务Sentinel

Sentinel 官方网站 sentinel-dashboard-1.8.7.jar包下载地址 在window通过命令行启动&#xff08;java -Dserver.port8080 -Dproject.namesentinel-dashboard -jar sentinel-dashboard-1.8.7.jar&#xff09;&#xff0c;可以通过 -Dserver.port修改控制台的端口 使用的版本最好…

CentOS7.9.2009安装配置logstash7.11.1

本文章使用CentOS7.9.2009服务器以root用户安装配置logstash7.11.1软件 1.服务器信息 [root@elasticsearch ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [root@elasticsearch ~]# 2.logstash安装配置 --> 上传logstash7.11.1版本至CentOS7.9.200…

【设计模式】4、prototype 原型模式

四、prototype 原型模式 https://refactoringguru.cn/design-patterns/prototype 如果希望 复制对象, 可使用 “prototype 模式” 如果 “待复制的对象” 是 interface 而不是 class, 或者如果 class 有 private 变量时. 无法知道 "待复制的对象"的细节, 则需要其…

Python 全栈 Web 应用模板:成熟架构,急速开发 | 开源日报 No.223

tiangolo/full-stack-fastapi-template Stars: 15.6k License: MIT full-stack-fastapi-template 是一个现代化的全栈 Web 应用模板。 使用 FastAPI 构建 Python 后端 API。使用 SQLModel 进行 Python SQL 数据库交互&#xff08;ORM&#xff09;。Pydantic 用于数据验证和设…

Linux目录和文件管理

Linux 目录结构 是树形结构&#xff0c;默认是以 根目录 / 为所有文件、目录的起点 目录介绍/root 超级用户(系统管理员)的主目录(特权阶级)/home存放所有用户文件的根目录&#xff0c;是用户主目录的基点&#xff0c;比如用户user的主目录就是/home/user&#xff0c;可以…

ARM的TrustZone技术

ARM的TrustZone技术是一种系统范围的安全解决方案&#xff0c;旨在为高性能计算平台上的各种应用提供保护&#xff0c;如安全支付、数字版权管理、企业服务和基于Web的服务。其核心原理是通过硬件级别的隔离和保护来增强系统的安全性。 工作原理 TrustZone技术通过在ARM架构中…

NODE MCU (ESP8285-ESP8266)用Arduino lDE 2.3.2烧录系统后串口监控不打印问题

问题: Arduino lDE 2.3.2,集合DOIT ESP-Mx DevKit板子,烧录代码后,串口监视器 打印不出来调试数据 分析: Arduino lDE 2.3.2工具提示,不支持调试 板载flash按钮无需按下,即可烧录系统,由于烧录和调试共用串口,所以怀疑是Arduino lDE 2.3.2在烧录时设置了串口的配置…

YOLTV8 — 大尺度图像目标检测框架(欢迎star)

YOLTV8 — 大尺度图像目标检测框架【ABCnutter/YOLTV8: &#x1f680;】 针对大尺度图像&#xff08;如遥感影像、大尺度工业检测图像等&#xff09;&#xff0c;由于设备的限制&#xff0c;无法利用图像直接进行模型训练。将图像裁剪至小尺度进行训练&#xff0c;再将训练结果…

C语言--内存函数

1.memcmp使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); 函数memcpy从 source 的位置开始向后 复制num个 字节的数据到 destination 指向的内存位置。 这个函数在遇到 \0 的时候并 不会停下来 。 如果source和destination有任何…

Echarts简单的多表联动效果和添加水印和按钮切换数据效果

多表联动 多表联动效果指的是在多个表格之间建立一种交互关系&#xff0c;以便它们之间的操作或选择能够相互影响。通常情况下&#xff0c;多表联动效果可以通过以下方式之一实现&#xff1a; 数据关联&#xff1a; 当在一个表格中选择或操作某些数据时&#xff0c;另一个表格…

练习4-11 统计素数并求和

本题要求统计给定整数M和N区间内素数的个数并对它们求和。 输入格式: 输入在一行中给出两个正整数M和N&#xff08;1≤M≤N≤500&#xff09;。 输出格式: 在一行中顺序输出M和N区间内素数的个数以及它们的和&#xff0c;数字间以空格分隔。 输入样例: 10 31输出样例: 7…

java数据结构与算法刷题-----LeetCode476. 数字的补数

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 位运算&#xff1a;取出非前导0位标1&#xff0c;进行异或2. …

Hadoop 3.1.3

第1章 Hadoop概述 1.1 Hadoop是什么 1.2 Hadoop发展历史&#xff08;了解&#xff09; 1.3 Hadoop三大发行版本&#xff08;了解&#xff09; Hadoop三大发行版本&#xff1a;Apache、Cloudera、Hortonworks。 Apache版本最原始&#xff08;最基础&#xff09;的版本&#x…

HTML基本语法

前言&#xff1a; html中不区分大小写&#xff0c;但建议用小写&#xff0c;因为使用组件时一般使用大写&#xff0c;便于区分两者 注释&#xff1a; <!-- 注释的内容 --> ~注释的内容只会显示在源码当中&#xff0c;不会显示在网页中 ~用于解释说明代码&#xff0c;或隐…