vue路由守卫用于登录验证权限拦截
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 ,那么路由会认为通过 放行
所以还需要加上请求拦截器才可以。