当前位置: 首页 > 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 页面提示权限不足
异步加载权限路由登录后根据角色动态加载对应菜单

相关文章:

  • 健康管理软件+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开发系统项目
  • 【软考】计算机系统构成及硬件基础知识
  • 手机ppt在哪个网站做/公司网站seo公司
  • 做网站首选智投未来1/宁波正规优化seo公司
  • 代做电子商务网站作业/1688的网站特色
  • 济南市建设工程招标投标协会网站/搜索图片识别
  • 利用海康威视做直播网站/指数基金
  • 临沂网站制作费用/企业网站推广技巧