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 ,那么路由会认为通过 放行

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

posted @ 2022-09-29 23:28  面向CV工程师  阅读(546)  评论(0编辑  收藏  举报