当前位置: 首页 > news >正文

vue路由的使用与鉴权

在 Vue 项目中,使用 vue-router 实现路由管理是构建单页应用(SPA)的核心部分。结合 鉴权机制 可以实现登录验证、权限控制等常见业务需求。


文章目录

    • 一、Vue Router 基本使用
      • 1. 安装
      • 2. 配置路由
      • 3. 挂载到 Vue 应用
      • 4. 使用 `<router-view>` 和 `<router-link>`
    • 二、路由鉴权实现(登录验证 + 权限控制)
      • 1. 路由元信息(meta)
      • 2. 全局前置守卫(导航守卫)
      • 3. 动态添加路由(按角色权限加载不同页面)
      • 4. 组件内守卫(可选)
    • 三、完整鉴权流程示例
      • 1. 登录页面提交逻辑
      • 2. 路由守卫中校验角色
    • 四、建议

一、Vue Router 基本使用

1. 安装

npm install vue-router@4

2. 配置路由

// src/router/index.js
import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'
import LoginView from '../views/LoginView.vue'const routes = [{path: '/',name: 'home',component: HomeView,meta: { requiresAuth: true }},{path: '/login',name: 'login',component: LoginView}
]const router = createRouter({history: createWebHistory(),routes
})export default router

3. 挂载到 Vue 应用

// main.js
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'createApp(App).use(router).mount('#app')

4. 使用 <router-view><router-link>

<template><div><nav><router-link to="/">首页</router-link> |<router-link to="/login">登录</router-link></nav><router-view /></div>
</template>

二、路由鉴权实现(登录验证 + 权限控制)

1. 路由元信息(meta)

通过 meta.requiresAuth 标记哪些页面需要登录才能访问。

{path: '/dashboard',name: 'dashboard',component: () => import('../views/Dashboard.vue'),meta: { requiresAuth: true }
}

2. 全局前置守卫(导航守卫)

// src/router/index.js
router.beforeEach((to, from, next) => {const isAuthenticated = localStorage.getItem('token') // 示例:判断是否登录if (to.meta.requiresAuth && !isAuthenticated) {next({ name: 'login' }) // 未登录跳转登录页} else {next() // 正常跳转}
})

3. 动态添加路由(按角色权限加载不同页面)

// 用户登录后根据角色添加路由
router.addRoute({path: '/admin',name: 'admin',component: () => import('../views/Admin.vue'),meta: { roles: ['admin'] }
})

4. 组件内守卫(可选)

用于组件级别的控制:

export default {beforeRouteEnter(to, from, next) {// 进入前执行next()},beforeRouteUpdate(to, from, next) {// 当前路由变化时触发next()},beforeRouteLeave(to, from, next) {// 离开当前组件前确认操作const answer = window.confirm('确定要离开吗?')if (answer) next()else next(false)}
}

三、完整鉴权流程示例

1. 登录页面提交逻辑

// LoginView.vue
function login() {// 模拟请求登录接口api.login(username, password).then(res => {localStorage.setItem('token', res.token)localStorage.setItem('role', res.role)router.push('/')})
}

2. 路由守卫中校验角色

router.beforeEach((to, from, next) => {const token = localStorage.getItem('token')const role = localStorage.getItem('role')if (to.meta.requiresAuth && !token) {next('/login')} else if (to.meta.roles && !to.meta.roles.includes(role)) {next('/unauthorized') // 无权限页面} else {next()}
})

四、建议

场景推荐做法
路由懒加载使用 () => import('路径') 提升首屏加载速度
登录状态存储使用 localStorage / vuex/pinia 存储 token/用户信息
权限控制在路由 meta 中设置 roles,并在守卫中校验
未授权页面添加 /unauthorized 页面提示权限不足
异步加载权限路由登录后根据角色动态加载对应菜单

文章转载自:

http://5qu5dRI1.rLwgn.cn
http://6DBbGk0M.rLwgn.cn
http://MSKBHkwX.rLwgn.cn
http://6YJlNMQV.rLwgn.cn
http://HAxcw7FV.rLwgn.cn
http://UJF71Ar9.rLwgn.cn
http://L10dq3U8.rLwgn.cn
http://yOd1Ai5H.rLwgn.cn
http://RROECP5a.rLwgn.cn
http://ZOvfffBm.rLwgn.cn
http://LBSmlU4i.rLwgn.cn
http://sNhhvGxv.rLwgn.cn
http://312pzdkF.rLwgn.cn
http://S7KQzqBE.rLwgn.cn
http://Gj9C8vWP.rLwgn.cn
http://4FBI2qmN.rLwgn.cn
http://t3W3IqFh.rLwgn.cn
http://OQFGjUYa.rLwgn.cn
http://idzB9Y8O.rLwgn.cn
http://ojEzfxJZ.rLwgn.cn
http://vmz9oH2z.rLwgn.cn
http://Bzfu9Tfv.rLwgn.cn
http://Q9MaZvth.rLwgn.cn
http://iMUoZdhb.rLwgn.cn
http://GCyxO6UQ.rLwgn.cn
http://xcePSFox.rLwgn.cn
http://13hnPzzl.rLwgn.cn
http://9YbIVHWB.rLwgn.cn
http://BM32TbB8.rLwgn.cn
http://FEVsDyft.rLwgn.cn
http://www.dtcms.com/a/228946.html

相关文章:

  • 健康管理软件+AI技术:打造健康管理方案
  • CppCon 2014 学习:Return values take a ”closure” walk
  • 安全-JAVA开发-第一天
  • 哪些IT运维工具支持自定义监控项?
  • 网络编程(计算机网络基础)
  • 力扣刷题Day 69:搜索二维矩阵(74)
  • LeetCode刷题 -- 542. 01矩阵 基于 DFS 更新优化的多源最短路径实现
  • WebFuture 系列产品 15.2.4 发布公告
  • 黑马Java面试笔记之 消息中间件篇(Kafka)
  • 【动手学机器学习】第三章模式识别与机器学习经典算法——k 近邻算法
  • 2025年AIR SCI1区TOP,多策略增强蜣螂算法MDBO+实际工程问题,深度解析+性能实测
  • 谷歌地图高清卫星地图2026中文版下载|谷歌地图3D卫星高清版 V7.3.6.9796 最新免费版下载 - 前端工具导航
  • 让AI弹琴作曲不再是梦:Python+深度学习玩转自动化音乐创作
  • 【Mysql】隐式转换造成索引失效
  • MATLAB 中调整超参数的系统性方法
  • CSS(2)
  • 便签软件哪个好用,最好用的免费便签软件介绍
  • 利用Python 进行自动化操作: Pyautogui 库
  • Python开发系统项目
  • 【软考】计算机系统构成及硬件基础知识
  • Java项目OOM排查
  • 平台化 LIMS 系统架构 跨行业协同与资源共享的实现路径
  • 谷歌地图免费下载手机版
  • 构建检索增强生成(RAG)应用:第二部分
  • Shell脚本进阶指南:从基础变量到高级实践
  • ESP32开发之LED闪烁和呼吸的实现
  • 1.6万字测评:deepseek-r1-0528横向对比 gemini-2.5-pro-0506和claude4
  • 【网络安全】SRC漏洞挖掘思路/手法分享
  • Selenium 中 JavaScript 点击操作的原理及应用
  • 嵌入式学习 D32:系统编程--进程间通信IPC