• 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();
        }
      }
    })
    
  • 相关阅读:
    文本检测和识别 代码结构梳理
    UnicodeDecodeError: 'utf-8' codec can't decode byte
    GPU 显存释放
    DCM 图片查看
    hive SQL 字母大小写转换
    vim常用命令之多行注释和多行删除
    js 模拟call、apply、bind实现
    CommonJS、AMD、CMD和ES6模块化区别
    js setTimeout setInterval 第三个参数说明
    js instanceof 实现原理
  • 原文地址:https://www.cnblogs.com/huyifei/p/10108013.html
Copyright © 2020-2023  润新知