mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
431 字
1 分钟
路由守卫:你是谁?你去哪?有通行证吗?
2025-12-05

前端的保安:Vue Router#

做单页应用(SPA),路由管理是绕不开的一环。而“路由守卫”(Navigation Guards)则是其中最精彩(也最容易出 Bug)的部分。

全局前置守卫:beforeEach#

这就好比小区门口的保安大爷,不管你是谁,进门先查证。

router.beforeEach((to) => {
if (to.name !== 'Login' && !isAuthenticated) {
return { name: 'Login' }
}
})

看起来逻辑天衣无缝?只要没登录,就踢回登录页。但是!如果你的逻辑写得稍微有一点漏洞,就会陷入无限循环

比如,你忘记判断 to.name !== 'Login',那么用户被重定向到 Login 页,再次触发 beforeEach,再次重定向……浏览器直接卡死,你也懵逼了。旧式的 next 参数仍受支持,但每条逻辑路径都必须且只能调用一次,直接返回目标路由更不容易写错。

组件内的守卫#

beforeRouteEnterbeforeRouteUpdatebeforeRouteLeave。这些钩子函数让我们可以精确控制组件级的路由行为。

  • beforeRouteEnter:在渲染该组件的对应路由被 confirm 前调用。注意!此时组件实例还没被创建,所以你不能用 this!这又是 Vue 新手的一大坑。
  • beforeRouteLeave:通常用来禁止用户在未保存修改前突然离开。

遇到的困难与思考#

路由守卫不能替代后端鉴权:后端仍要验证 Token 和资源权限,前端守卫负责提前拦截无权限页面、保存未提交状态或补齐跳转上下文。两边职责不同,不能因为已经用了 JWT 就把其中一边省掉。

保安

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

路由守卫:你是谁?你去哪?有通行证吗?
https://blog.luozili.work/posts/vue-learning-3/
作者
llbzow
发布于
2025-12-05
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录

💬
🎀