vue-router的鉴权和守卫

本文介绍了vue-router的路由导航守卫,包括其原理、两种实现鉴权的方法:addRoutes和beforeEach,以及不同类型的路由守卫,如全局前置守卫、组件内守卫和单个路由守卫,强调了next函数在守卫中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是vue-router

路由导航守卫
又叫路由的钩子函数或者路由的生命周期函数
就是路由 从开始进入路径到跳转结束这个过程中 到了某个阶段会自动执行的函数

原理

路由就是用来解析URL以及调用对应的控制器,并返回从视图对象中提取好的网页代码给web服务器,最终返回给客户端。

hash模式:在浏览器中符号的“#”,以及#后面的字符称之为hash,用window.location.hash读取;

特点:

hash虽然在URL中,但不被包括在HTTP请求中;用来指导浏览器动作,对服务端安全无用,

hash不会重加载页面。

hash 模式下,仅 hash 符号之前的内容会被包含在请求中,如 http://www.xxx.com,因此对于后端来说,即使没有做到对路由的全覆盖,也不会返回 404 错误。

 

history模式:history采用HTML5的新特性;且提供了两个新方法:pushState(),

replaceState()可以对浏览器历史记录栈进行修改,以及popState事件的监听到状态变更。

特点:

history 模式下,前端的 URL 必须和实际向后端发起请求的 URL 一致,如 地址后加上/items/id。后端如果缺少对 /items/id 的路由处理,将返回 404 错误。

 

二、实现鉴权的方式分两种:


1、通过vue-router addRoutes 方法注入路由实现控制


通过请求服务端获取当前用户路由配置,编码为 vue-router 所支持的基本格式(具体如何编码取决于前后端协商好的数据格式),通过调用 this.$router.addRoutes 方法将编码好的用户路由注入到现有的 vue-router 实例中去,以实现用户路由。
addRoutes 方法仅仅是帮你注入新的路由,并没有帮你剔除其它路由!

2、通过vue-router beforeEach 钩子限制路由跳转


通过请求服务端获取当前用户路由配置,通过注册 router.beforeEach 钩子对路由的每次跳转进行管理,每次跳转都进行检查,如果目标路由不存在于当前路由中,取消跳转,转为跳转错误页。

方法①和②的区别是一个是自动的,一个是手动的。
 

三、路由守卫

作用:守卫页面跳转 监听页面跳转 在页面跳转前或者跳转后执行一些操作。
 

(1)vue-router全局有三个守卫:           

router.beforeEach 全局前置守卫 进入路由之前

router.beforeResolve 全局解析守卫(2.5.0+) 在beforeRouteEnter调用之后调用

router.afterEach 全局后置钩子 进入路由之后

(2)组件内的守卫:

beforeRouteEnter

beforeRouteUpdata(2.2新增)

beforeRouteLeave

(3)单个路由独享的守卫

beforeEnter

(4)路由守卫钩子函数里面的三个参数分别是什么?

to,from,next 这三个参数:

to和from是将要进入和将要离开的路由对象,路由对象指的是平时通过this.$route获取到的路由对象。

next:Function 这个参数是个函数,且必须调用,否则不能进入路由(页面空白)。

next() 进入该路由。

next(false): 取消进入路由,url地址重置为from路由地址(也就是将要离开的路由地址)。 next 跳转新路由,当前的导航被中断,重新开始一个新的导航。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值