vue-router的访问权限管理


路由守卫(路由钩子、拦截器)

vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的。

可以不登录直接进入系统,但是访问指定位置需要登录

只有一级目录的情况下的拦截

import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)

const router = new Router({...});

# 需要登录才能访问/message路由,如果没有登录就调回到登录页面
router.beforeEach((to, from, next) => {
  let isLogin = false; // 默认没有登录
  if (!isLogin && to.path === '/message') {
    next('/login');
  } else {
    next();
  }
})

多级目录情况下的拦截

router.beforeEach((to, from, next) => {
  let isLogin = false; // 默认没有登录
  let matched = to.matched.some((item) => {
    return item.path === '/message';
  })
  if (!isLogin && matched) {
    next('/login');
  } else {
    next();
  }
})

直接在路由中设置拦截

# 路由配置
{
  path: '/message',
  meta: {
    login_required: false
  },
  component: Message,
  children: [
    {
      path: 'infos',
      component: MessageInfos
    }
  ]
}

# 拦截器配置
# 在单个路由中使用拦截
router.beforeEach((to, from, next) => {
  let isLogin = false; // 默认没有登录
  let matched = to.matched.some((item) => {
    return item.meta.login_required;
  })
  if (!isLogin && matched) {
    next('/login');
  } else {
    next();
  }
})

必须先登录才能进入系统

import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)

const router = new Router({...});

# 访问系统需要先登录
router.beforeEach((to, from, next) => {
  let isLogin = false; // 默认没有登录
  if (!isLogin && to.path !== '/login') {
    next('/login');
  } else {
    next();
  }
})

登录成功以后,不能访问登录、注册、找回密码页面

import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)

const router = new Router({...});

# 登录成功以后,不能访问登录、注册、找回密码页面
router.beforeEach((to, from, next) => {
  let isLogin = true; // 登录成功
  if (!isLogin && to.path !== '/login') {
    next('/login');
  } else {
    if(to.path === '/login'){
      next('/');
    } else {
      next();
    }
  }
})


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM