zoukankan      html  css  js  c++  java
  • 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();
        }
      }
    })
    
  • 相关阅读:
    element-ui中tabs页设置第一个页面不可关闭
    验证实现element-ui树形控件的自定义图标及右键菜单
    vue项目接口地址的定义
    js数组与字符串的相互转换方法
    vue的双向绑定原理及实现
    vue中的懒加载和按需加载
    使用gulp将移动端px转为rem
    百度搜索--jquery
    关于Ajax中http协议
    用nodejs搭建一个简单的服务器
  • 原文地址:https://www.cnblogs.com/huyifei/p/10108013.html
Copyright © 2011-2022 走看看