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 ,那么路由会认为通过 放行
所以还需要加上请求拦截器才可以。