什么是路由独享守卫?在 index.js 中针对特定路径进行权限校验的实战

夜雪酱_5569

夜雪酱_5569

2026-05-01

1014人浏览

原创

路由独享守卫是Vue Router中为特定路由配置的前置守卫,仅在访问该路由时触发,支持独立权限控制、逻辑内聚、维护清晰;需在routes数组某对象中定义beforeEnter函数,参数为(to, from, next),须手动处理异步且next只能调用一次。

什么是路由独享守卫?在 index.js 中针对特定路径进行权限校验的实战

路由独享守卫是 Vue Router 中专为某个具体路由配置的前置守卫,只在访问该路由时触发,不干扰其他路由。它比全局守卫更精准,适合对敏感页面(如后台管理页、用户中心)做独立权限控制,且逻辑只写在对应路由配置里,维护清晰、耦合低。

它长什么样?怎么配?

在 router/index.js(或你的路由配置文件)中,直接在某条 routes 数组里的对象 上添加 beforeEnter 函数:

  • 参数固定为 (to, from, next),其中 to 是目标路由,from 是来源路由,next 是必须调用的放行函数
  • 不能写在 router.beforeEach 里,必须属于某一条 { path: '/admin', name: 'Admin', component: ..., beforeEnter: ... }
  • 不支持 async/await 直接返回,需手动处理异步(比如用 next(false) 或重定向)

实战:给 /admin 路径加登录态校验

假设你用 localStorage 存 token,只有带有效 token 才能进后台页:

arcgis-js
arcgis-js

提供 ArcGIS Maps SDK for JavaScript 开发辅助,涵盖 2D/3D 地图视图、图层管理、数据可视化、空间分析等功能模块的参考和示例指导。

下载
{
  path: '/admin',
  name: 'Admin',
  component: () => import('@/views/Admin.vue'),
  beforeEnter: (to, from, next) => {
    const token = localStorage.getItem('token')
    if (!token) {
      next({ name: 'Login', query: { redirect: to.fullPath } })
      return
    }
    // 可选:检查 token 是否过期(比如解析 JWT payload)
    try {
      const payload = JSON.parse(atob(token.split('.')[1]))
      if (Date.now() >= payload.exp * 1000) {
        localStorage.removeItem('token')
        next({ name: 'Login', query: { redirect: to.fullPath } })
        return
      }
    } catch (e) {
      next({ name: 'Login', query: { redirect: to.fullPath } })
      return
    }
    next()
  }
}
  • 未登录时跳转登录页,并把当前路径记在 redirect 参数里,登录成功后可自动跳回
  • token 解析失败或已过期,同样清空并跳转,避免无效凭证绕过
  • 所有逻辑仅影响 /admin 这一个路由,不影响首页、文章页等其他路径

和全局守卫比,它有什么优势?

当你只需要限制个别页面,而不是全站统一拦截时,路由独享守卫更合适:

  • 避免在全局守卫里堆一堆 if (to.name === 'xxx') 判断,让代码更聚焦
  • 不同页面可有不同校验逻辑——比如 /admin 要管理员权限,/user/profile 只需普通登录即可
  • 路由配置和守卫写在一起,新人看代码时一眼就能明白“这个页面要什么条件才能进”
  • 执行时机在全局守卫之后、组件守卫之前,顺序可控,不会被其他守卫意外覆盖

注意几个易错点

实际写的时候容易踩坑,这几个细节建议标在注释里:

  • next() 必须且只能调用一次,漏调会卡住导航,重复调用会报错
  • 不要在 beforeEnter 里直接修改 router.push,要用 next({ path: ... }) 替代
  • 如果需要异步验证(如调 API 校验权限),得用 next(false) 暂停,等响应回来再手动 next() 或 next('/login')
  • Vite + Vue3 项目中,确保路由配置导出的是 createRouter(...) 实例,且 beforeEnter 写在 routes 数组内,不是 router 实例上

相关文章

路由优化大师
路由优化大师

路由优化大师是一款及简单的路由器设置管理软件,其主要功能是一键设置优化路由、屏广告、防蹭网、路由器全面检测及高级设置等,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

js 路由

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2743

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5963

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6910

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

6678

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

943

5

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

40

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

20

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

40

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

140

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 21.2万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 4.9万人学习