Vue实现路由守卫的示例代码

2025-09-26 13:50

本文主要是介绍Vue实现路由守卫的示例代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着...

一、概念

路由守卫(Navigation Guards)本质上就是 在路由跳转前后,拦截用户导航并做一些逻辑处理的钩子函数
常见用途js有:

  • 鉴权控制:比如没有登录就不允许进入某些页面。
  • 数据预加载:在进入某个页面前,提前拉取数据。
  • 页面跳转控制:比如离开页面前弹出“是否保存更改”的提示。

简单理解:路由守卫就是 vue Router 提供的一种“钩子函数”,用来控制页面导航的行为。

二、类型

Vue Router 提供了三类守卫:

(1)全局守卫

对所有路由跳转都生效。

// 全局前置守卫
router.beforeEach((to, from, next) => {
  const token = localStorage.getItem('token')
  if (to.meta.requiresAuth && !token) {
    // 需要登录,但没 token,跳转到登录
    next('/login')
  } else {
    next()
  }
})
// 全局后置守卫(一般用来修改标题等)
router.afterEach((to) => {
  document.title = to.meta.title || '默认标题'
})
export default router

(2)路由独享守卫

只针对某一个路由生效。

{
  path: '/profile',
  component: () => import('@/views/Profile.vue'),
  beforeEnter: (to, from, next) => {
    const token = localStorage.getItem('token')
    if (!token) {
      next('/login')
    } else {
      next()
    }
  }
}

(3)组件内守卫

直接写在组件里,对进入/离开当前组件生效。

export defapythonult {
  name: 'Profile',
  // 进入当前组件之前
  beforeRouteEnter(to, from, next) {
    console.log('即将进入 Profile 页面')
    next()
  },
  /China编程/ 路由更新(比如 /profile/1 -> /profile/2)
  beforeRouteUpdate(to, from, next) {
   php console.log('路由参数变化,更新页面数据')
    next()
  },
  // 离开当前组件时
  beforeRouteLeave(to, from, next) {
    const answer = window.confirm('确定要离开吗?未保存的数据会丢失')
    if (answer) {
      next()
    } else {
      next(false) // 阻止导航
    }
  }
}

三、实战

以下为作者的演示:

  1. 全局守卫
  2. 如果token过期或token错误会返回到登录页面

注意:以上效果需要配合JWT来实现,详情请看我的博客文章:

JWT令牌

在index.js文件中写入全局守卫:

/www.chinasem.cn/ 全局前置守卫
router.beforeEach((to, from, next) => {
  const token = localStorage.getItem('token') // 从本地取 token
  if (to.meta.requiresAuth && !token) {
    // 如果需要登录且没有 token,就跳到登录页
    next({ path: '/' })
  } else {
    next() // 其他情况放行
  }
})

在request.Js中添加拦截器:

// 响应拦截器:统一处理 401
request.interceptors.response.use(
  (response) => response,
  (error) => {
    if (error.response && error.response.status === 401) {
      localStorage.removeItem("token"); // 清除过期 token
      router.push("/"); // 跳转到登录页
    }
    return Promise.reject(error);
  }
);

可以试验一下,登录成功进入ai页面后:

Vue实现路由守卫的示例代码

打开F12,打开本地存储,将token删除,回到页面,并刷新。。

Vue实现路由守卫的示例代码

这时当前端发送的请求头不带token令牌时,后端会返回401,,axois拦截器会拦截到并且退回登录页面:

Vue实现路由守卫的示例代码

到此这篇关于Vue实现路由守卫的示例代码的文章就介绍到这了,更多相关Vue 路由守卫内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于Vue实现路由守卫的示例代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1156041

相关文章

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

docker 重命名镜像的实现方法

《docker重命名镜像的实现方法》在Docker中无法直接重命名镜像,但可通过添加新标签、删除旧镜像后重新拉取/构建,或在DockerCompose中修改配置文件实现名称变更,感兴趣的可以了解一下... 目录使用标签(Tagging)删除旧的php镜像并重新拉取或构建使用docker Compose在Do

vue监听属性watch的用法及使用场景详解

《vue监听属性watch的用法及使用场景详解》watch是vue中常用的监听器,它主要用于侦听数据的变化,在数据发生变化的时候执行一些操作,:本文主要介绍vue监听属性watch的用法及使用场景... 目录1. 监听属性 watch2. 常规用法3. 监听对象和route变化4. 使用场景附Watch 的

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

Java实现为PDF设置背景色和背景图片

《Java实现为PDF设置背景色和背景图片》在日常的文档处理中,PDF格式因其稳定性和跨平台兼容性而广受欢迎,本文将深入探讨如何利用Spire.PDFforJava库,以简洁高效的方式为你的PDF文档... 目录库介绍与安装步骤Java 给 PDF 设置背景颜色Java 给 PDF 设置背景图片总结在日常的

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

Python屏幕抓取和录制的详细代码示例

《Python屏幕抓取和录制的详细代码示例》随着现代计算机性能的提高和网络速度的加快,越来越多的用户需要对他们的屏幕进行录制,:本文主要介绍Python屏幕抓取和录制的相关资料,需要的朋友可以参考... 目录一、常用 python 屏幕抓取库二、pyautogui 截屏示例三、mss 高性能截图四、Pill