Vue_router路由拦截-导航守卫&路由拦截后的判断是否已登录

本文详细介绍了Vue中使用路由拦截实现权限控制的方法,通过全局前置守卫beforeEach对所有路由进行拦截,根据条件判断是否允许跳转或重定向至登录页,并在登录组件中处理登录后返回原页面的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

路由拦截

导航守卫

全局前置守卫

可以在路由跳转时对所有的路由进行拦截,拦截后根据条件对路由进行next() 或者next到其他路由操作

const router = new VueRouter()
router.beforeEach((to, from, next) => {
  // to表示要去的路由地址
  // from表示来自哪个路由地址
  // next可以进行路由跳转
})

路由拦截后的判断

const routes = [
  {
    path: '/',
    meta: {
      requiredAuth: true
    }
  }
]
const router = new VueRouter()
router.beforeEach((to, from, next) => {
  // 判断当前路由以及路由的父路由中是否包含meta,meta里是否有requiredAuth
  // to.matched中包含当前路由以及父路由
  // 如果判断出to.matched中某个路由里有meta.requiredAuth
  if (to.matched.some(route => route.meta.requiredAuth)) {
    // 判断是否已经登录
    if (已登录) {
      next()  
    } else {
      // 那就跳转到登录 并且添加query参数returnurl为to.path
      next({
        path: '/login',
        query: {
          returnurl: to.path // 从哪来回哪去
        }
      })
    }
  } else {
    next()
  }
})

登录组件的处理

<template>
  <div>

    <button @click="login">登录</button>
  </div>
</template>
<script>
export default {
  methods: {
    login () {
      // 调用结构
      login(user, password).then(res => {
        // 将结果中的验证信息存储到localStorage中

        // 成功则跳转到对应的来时的页面
        const url = this.$route.query.returnurl || '/'
        this.$router.push(url)
      })
    }
  }
}
</script>
Vue-router提供了导航守卫来保护路由导航导航守卫可以在跳转或取消导航的过程中进行拦截导航守卫可以分为全局守卫路由独享守卫和组件级守卫。 全局守卫是注册在router实例上的,可以使用router.beforeEach方法注册一个全局前置守卫。在每次路由切换之前,全局前置守卫会被触发并接收to、from和next三个参数。可以在全局前置守卫中进行一些权限验证或者其他操作,然后通过调用next方法来进行导航路由独享守卫是在定义路由的时候通过beforeEnter属性来注册。路由独享守卫只会对特定的路由生效,可以在路由配置中定义一个beforeEnter函数来进行拦截操作。 组件级守卫是使用vue-router提供的beforeRouteEnter、beforeRouteUpdate和beforeRouteLeave方法来注册。beforeRouteEnter在进入路由前被调用,而beforeRouteUpdate在当前路由复用时被调用,beforeRouteLeave在离开当前路由时被调用。这些守卫可以在组件内部进行定义,并可以在组件内部进行一些操作,比如获取数据或者进行一些清理工作。 总结起来,vue-router路由守卫提供了全局守卫路由独享守卫和组件级守卫来保护路由导航,可以在不同的阶段进行各种操作,确保路由的安全和灵活性。&lt;span class=&quot;em&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;em&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;em&quot;&gt;3&lt;/span&gt; #### 引用[.reference_title] - *1* *2* *3* [Vue路由守卫导航守卫)](https://blog.youkuaiyun.com/m0_48949881/article/details/122436528)[target=&quot;_blank&quot; data-report-click={&quot;spm&quot;:&quot;1018.2226.3001.9630&quot;,&quot;extra&quot;:{&quot;utm_source&quot;:&quot;vip_chatgpt_common_search_pc_result&quot;,&quot;utm_medium&quot;:&quot;distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2&quot;}}] [.reference_item style=&quot;max-width: 100%&quot;] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

本地是好的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值