vue路由守卫--用于前端实现用户权限验证

一. 使用场景

1.首次登录的时,前端调后端的登录接口,发送输入框中的用户名和密码;
2.后端收到请求,验证用户名和密码,验证成功,就给前端返回一个token(令牌相当于一个门牌,如返回对象);
3.前端拿到token,将token存储到localStorage和vuex中,并跳转路由页面
4.前端每次跳转路由,就判断 localStroage 中有无 token ,没有就跳转到登录页面,有则跳转到对应路由页面
5.每次调后端接口,都要在请求头中加token
6后端判断请求头中有无token,有token,就拿到token并验证token,验证成功就返回数据,验证失败(例如:token过期)就返回401,请求头中没有token也返回401
7.如果前端拿到状态码为401,就清除token信息并跳转到登录页面(首页)

二.路由守卫的作用

对路由进行权限控制,用来判断用户是否登录,该页面用户是否有权限浏览,需要结合meta来实现

三.路由守卫的分类

全局守卫、独享守卫、组件内守卫
1.全局路由守卫
全局前置守卫:初始化时执行、每次路由切换前执行
router.beforeEach((to,from,next)=>{})
回调函数中的参数,to:进入到哪个路由去,from:从哪个路由离开,next:函数,决定是否展示放行你要看到的路由页面。
router.beforeEach((to,from,next)=>{
	console.log('beforeEach',to,from)
	if(to.meta.isAuth){ //判断当前路由是否需要进行权限控制
		if(localStorage.getItem('school') === 'yangcun'){ //权限控制的具体规则
			next() //放行
		}else{
			alert('暂无权限查看')
			// next({name:'guanyu'})
		}
	}else{
		next() //放行
	}
})
全局后置守卫:初始化时执行、每次路由切换后执行
全局后置钩子router.afterEach((to,from)=>{})
只有两个参数,to:进入到哪个路由去,from:从哪个路由离开。
router.afterEach((to,from)=>{
	console.log('afterEach',to,from)
	if(to.meta.title){ 
		document.title = to.meta.title //修改网页的title
	}else{
		document.title = 'vue_test'
	}
})
2.独享路由守卫
beforeEnter:(to,from,next)=>{},用法与全局守卫一致。只是,将其写进其中一个路由对象中,只在这个路由下起作用。
beforeEnter(to,from,next){
	console.log('beforeEnter',to,from)
	if(to.meta.isAuth){ //判断当前路由是否需要进行权限控制
		if(localStorage.getItem('school') === 'yangcun'){
			next()
		}else{
			alert('暂无权限查看')
			// next({name:'guanyu'})
		}
	}else{
		next()
	}
}
3.组件内路由守卫
到达当前守卫的组件时:
//进入守卫:通过路由规则,进入该组件时被调用beforeRouteEnter (to, from, next) {},
//离开守卫:通过路由规则,离开该组件时被调用beforeRouteLeave (to, from, next) {}
		// 通过路由规则,进入该组件时被调用
		beforeRouteEnter(to,from,next){
			console.log('About--beforeRouteEnter',to,from)
			if(to.meta.isAuth){
				if(localStorage.getItem('school')==='yangcun'){
					next()
				}else{
					alert('暂无权限查看')
				}
			}else{
				next()
			}
		},

		// 通过路由规则,离开该组件时被调用
		befortRouteLeave(to,from,next){
			console.log('About--beforeRouteEnte',to,from)
			next()
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值