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.rhkb.cn/news/310539.html

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

相关文章

[开发日志系列]PDF图书在线系统20240415

20240414 Step1: 创建基础vueelment项目框架[耗时: 1h25min(8:45-10:10)] 检查node > 升级至最新 (考虑到时间问题,没有使用npm命令行执行,而是觉得删除重新下载最新版本) > > 配置vue3框架 ​ 取名:Online PDF Book System 遇到的报错: 第一报错: npm ERR! …

【JavaEE初阶系列】——网络原理之进一步了解应用层以及传输层的UDP协议

目录 &#x1f6a9;进一步讲应用层 &#x1f388;自定义应用层协议 &#x1f388;用什么格式组织 &#x1f469;&#x1f3fb;‍&#x1f4bb;xml(远古的数据组织格式) &#x1f469;&#x1f3fb;‍&#x1f4bb;json(当下最流行得一种数据组织格式) &#x1f469;&…

【vue】Vue3开发中常用的VSCode插件

Vue - Official&#xff1a;vue的语法特性&#xff0c;如代码高亮&#xff0c;自动补全等 Vue VSCode Snippets&#xff1a;自定义一些代码片段 v3单文件组件vdata数据vmethod方法 别名路径跳转 参考 https://www.bilibili.com/video/BV1nV411Q7RX

【THM】Net Sec Challenge(网络安全挑战)-初级渗透测试

介绍 使用此挑战来测试您对网络安全模块中获得的技能的掌握程度。此挑战中的所有问题都可以仅使用nmap、telnet和来解决hydra。 挑战问题 您可以使用Nmap、 Telnet 和Hydra回答以下问题。 2.1小于10000的最大开放端口号是多少? 8080 nmap -p- -T4 10.10.234.218 2.2普通…

科大讯飞星火开源大模型iFlytekSpark-13B GPU版部署方法

星火大模型的主页&#xff1a;iFlytekSpark-13B: 讯飞星火开源-13B&#xff08;iFlytekSpark-13B&#xff09;拥有130亿参数&#xff0c;新一代认知大模型&#xff0c;一经发布&#xff0c;众多科研院所和高校便期待科大讯飞能够开源。 为了让大家使用的更加方便&#xff0c;科…

前端上传照片压缩 (适合 vue vant组件的)

为什么要这样做&#xff1f; &#xff08;减小服务器压力 提升用户体验上传照片和加载照片会变快&#xff09; 最近有一个需求&#xff0c;通过手机拍照后上传图片到服务器&#xff0c;大家应该都知道&#xff0c;现在的手机像素实在是太高了&#xff0c;随便拍一张都是10M以上…

模拟移动端美团案例(react版)

文章目录 目录 概述 项目搭建 1.启动项目&#xff08;mock服务前端服务&#xff09; 2.使用Redux ToolTik(RTK)编写store(异步action) 3.组件触发action并渲染数据 一、渲染列表 ​编辑 二、tab切换类交互 三、添加购物车 四、统计区域功能实现 五、购物车列表功能实现 六、控制…

鸿蒙OS开发学习:【第三方库调用】

介绍 本篇Codelab主要向开发者展示了在Stage模型中&#xff0c;如何调用已经上架到[三方库中心]的社区库和项目内创建的本地库。效果图如下&#xff1a; 相关概念 [Navigation]&#xff1a;一般作为Page页面的根容器&#xff0c;通过属性设置来展示页面的标题、工具栏、菜单。…

UE5 GAS开发P32,33 初始化状态并绑定在HUD上,拾取物品增加血量和减少蓝量

这节课主要是修改WidgetController和OverlayController,在EffectActor内新增了一个减少蓝量的代码,同时修复了一个bug,并且展示了为什么要写成单独的控制器,因为要考虑多人游戏的情况,每一个控制器都是一个单独的角色 首先修改AuraAttirbuteSet.cpp UAuraAttributeSet::UAura…

算法打卡day46|动态规划篇14| Leetcode 1143.最长公共子序列、1035.不相交的线、53. 最大子序和

算法题 Leetcode 1143.最长公共子序列 题目链接:1143.最长公共子序列 大佬视频讲解&#xff1a;1143.最长公共子序列视频讲解 个人思路 本题和718. 最长重复子数组很相像&#xff0c;思路差不多还是用动态规划。区别在于这题不要求是连续的了&#xff0c;但要有相对顺序 解…

关于springboot集成锐浪插件遇到的坑

1 项目背景 这几天“被迫”需要研究java集成锐浪&#xff0c;根据模板和数据输出pdf&#xff0c;便于前端预览或打印。看着不起眼的东西&#xff0c;想着有官方帮助文档&#xff0c;应该一天就能搞定的事&#xff0c;没想到却研究了3天多才正式初步完成。下面介绍下在集成中需要…

【Java】图片处理工具ImageMagick简介及其在Java中的应用

ImageMagick是一款强大的图像处理软件&#xff0c;它可以用于创建、编辑、合并和转换图像。它支持超过200种图像格式&#xff0c;并且提供了丰富的功能&#xff0c;包括图像缩放、旋转、裁剪、加水印、添加特效等。ImageMagick还支持批量处理图像&#xff0c;可以通过命令行或者…

【剪映专业版】06音频和图片格式

视频课程&#xff1a;B站有知公开课【剪映电脑版教程】 音频格式 最常见格式&#xff1a;MP3和WAV 转换工具&#xff1a;在线转换或者格式工厂&#xff08;免费&#xff0c;支持音频、视频、图片、文档等转换&#xff0c;好工具&#xff09; 图片格式

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十二 简单把视频的水印去掉效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十二 简单把视频的水印去掉效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十二 简单把视频的水印去掉效果 一、简单介绍 二、简单把视频的水印去掉效果实现原理 …

基于有序抖动块截断编码的水印嵌入和提取算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 噪声测试 旋转测试 压缩测试 2.算法运行软件版本 matlab2022a 3.部分核心程序 ............................................................…

Day23_学点儿JSON_定义、数据格式、和XML比较、插件

1 JSON定义 定义&#xff1a;是一种轻量级的数据交换格式 JSON是JavaScript Object Notation缩写 特点&#xff1a; 易于程序员阅读和编写。易于计算机解析和生成。其实是javascript的子集&#xff1a;原生javascript支持JSON <script type"text/javascript">…

关于沃进科技无线模块demo软件移植问题

文章目录 一、无线模块开发测试准备二、开发板硬件三、开发板默认功能上电默认界面功能选择界面数据包发送界面数据包接收显示界面射频性能测试界面参数设置界面固件信息显示界面 四、软件开发软件SDK框图1、射频硬件驱动&#xff08;详见./radio/myRadio_gpio.c&#xff09;2、…

【ARM 裸机】汇编 led 驱动之烧写 bin 文件

1、烧写概念 bin 文件烧写到哪里呢&#xff1f;使用 STM32 的时候烧写到内部 FLASH&#xff0c;6ULL 没有内部 FLASH&#xff0c;是不是就不能烧写呢&#xff1f;不&#xff0c;6ULL 支持 SD卡、EMMC、NAND FLASH、NOR FLASH 等方式启动&#xff0c;在裸机学习的工程中&#x…

c语言顺序表的简单介绍

顺序表的分类&#xff1a; 静态顺序表物理结构上呈线性存储&#xff0c;而动态在逻辑结构上呈线性存储&#xff08;何为线性存储&#xff1f;数据按照线性顺序&#xff08;也称为顺序存储&#xff09;排列在连续的存储单元中。&#xff09;动态顺序表当空间不够时可以自行增容&…

三.音视频编辑-音频混合-概述

引言 当我们在前两篇博客中成功地构建了一个媒体组合&#xff0c;并且略过了音频部分时&#xff0c;我们意识到了我们需要对这个项目进行更详细的探讨。在本篇博客中&#xff0c;我们将会展示如何创建一个包含视频轨道、配音音频轨道以及背景音频轨道的完整媒体组合。更进一步…