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();
        }
      }
    })
    
  • 相关阅读:
    leetcode刷题-131~
    leetcode刷题-106~114/116~122/125/127/129~130
    leetcode刷题-100~105
    Intel-Pin的windows安装
    九、appium自动化框架综合实践
    QQ传文件用例设计
    mysql常用语句
    谐云试用的日子
    码农开发资料集
    MyBatis中一个SQL语句的执行过程解析
  • 原文地址:https://www.cnblogs.com/huyifei/p/10108013.html
Copyright © 2011-2022 走看看