深圳幻海软件技术有限公司 欢迎您!

vue路由守卫用于登录验证权限拦截

2023-03-02

vue路由守卫用于登录验证权限拦截vue路由守卫-全局(router.beforeEach((to,from,next)=>来判断登录和路由跳转状态)主要方法:to:进入到哪个路由去from:从哪个路由离开next:路由的控制参数,常用的有next(true)和next(false)home需

vue路由守卫用于登录验证权限拦截

vue路由守卫 - 全局(router.beforeEach((to, from, next) =>来判断登录和路由跳转状态)

主要方法

  • to:进入到哪个路由去
  • from:从哪个路由离开
  • next:路由的控制参数,常用的有next(true)和next(false)

home需要判断是否有token存在才能访问home,

login和register页面不需要token,直接放行

在routes内加上meta属性标记

router路由设置

index.js

// 引入路由
import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '../views/HomeView.vue'
// 使用路由插件
Vue.use(VueRouter)
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
return originalPush.call(this, location).catch(err => err)
}
const routes = [
{
path: '/',
name: 'login',
meta:{
auth:false
},
component: ()=>import('../views/Login/LoginView.vue')
},
{
path: '/register',
name: 'register',
meta:{
auth:false
},
component: ()=>import('../views/Register/RegisterView.vue')
},
{
path: '/index',
name: 'index',
meta:{
auth:true
},
component: ()=>import('../views/Index/Index.vue'),
// redirect:'/manage',
children:[
{
path: '/manage',
name: '图书管理',
meta:{
auth:true
},
component: ()=>import('../views/Manage/Manage.vue')
},
]
},
]
const router = new VueRouter({
routes
});
router.beforeEach((to, from, next) => {
const isLogin = window.localStorage.getItem('main'); //获取本地存储的登陆信息
console.log(isLogin)
console.log("to:"+to.name) //进入到哪个路由去
console.log("from:"+from) //从哪个路由离开
//next:路由的控制参数,常用的有next(true)和next(false)
//next() 直接进to 所指路由
//next('route') 跳转指定路由
if (to.meta.auth) {//判断当前页面是否为拦截页面 如果是的话:
if (isLogin) { //判断是否登陆
next(); //已登录,跳转首页
} else {
next({name:'login'}); //没登录,继续进入login页
}
}else{//如果不是要拦截页面,就放行。
next();
}
});
export default router

这个只能判断是否带了token,不能判断token是否有效,比如手动在浏览器伪造加token ,那么路由会认为通过 放行

所以还需要加上请求拦截器才可以。