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();
        }
      }
    })
    
  • 相关阅读:
    vue-cli
    respond.js
    dataTable调用接口渲染数据,没有数据,报错
    jq自定义鼠标右键菜单
    datatables通过ajax调用渲染数据,怎么根据数据给td添加class
    【C++ Primer 第11章 练习答案】2. 关联容器概述
    【Leetcode】1. Two Sum
    【C++】拷贝构造函数(深拷贝,浅拷贝)详解
    【图的遍历】广度优先遍历(DFS)、深度优先遍历(BFS)及其应用
    【C++ Primer 第十三章】4. 拷贝控制示例
  • 原文地址:https://www.cnblogs.com/huyifei/p/10108013.html
Copyright © 2011-2022 走看看