10行代码实现vue路由最简单的登陆拦截

news2025/4/9 10:30:45

需求:不涉及任何角色权限,基本实现目标,有token就可查看任何页面,否则就去登陆,来一步步实现

1. 创建你的路由页面,此处略了

2. 导航守卫拦截判断思路

// 创建路由
const router = createRouter({
  history: createWebHistory(),
  routes: [],
})
// 开始拦截,如果是登陆页,就放行,放行后进入下一个页面
router.beforeEach((to, _, next) => {
 ....
})

2.1 判断当前是不是登陆页面,如果是,那么点击登陆后,就放行,即调用next(),进入下一个页面

// 开始拦截,如果是登陆页,就放行,放行后进入下一个页面
router.beforeEach((to, _, next) => {
 if (to.path === '/login') {
    next()
  }
  // 这里这么写,只是为了演示能进入下一个页面,如果不写这个,
  // 你点击跳转了,路由的to.path 已经变为其它的路径了,
  // 你是看不到下个页面的
  next()
})

2.1.1 演示1,如果不写第二个next(),你会看到这个演示

可以看到 点击后,[to.path] 变成了/home, 所以判断不再走 if 了,为了能看到后边的页面,你需要next()
请添加图片描述

2.1.2 演示2,加入第二个next(),你会看到这个演示

请添加图片描述

2.2 如果不是登录页,思路就是 判断有木有 登陆过,即有木有token,如果登陆过,就放行,即next(),可以查看任何页面,如果没有登陆过,就跳转到登录页

  • 不需要登陆,就可以看到的页面就不说了,你创建个白名单数组判断下就可以了,直接放行,这里不做演示

登陆跳转

// 点击登陆... 代码省略
// 拿到token,存起来
localStorage.setItem('token', 'token')
// 接着跳转到下个路径
router.push('/home')

守卫的代码就是,判断不是登陆页的时候,如果有token,放行,没有的话,跳转回登陆页

router.beforeEach((to, _, next) => {
  // 获取token
  const token = localStorage.getItem('token')
  if (to.path === '/login') {
    next()
  } else {
    // 判断有木有token
    token && next()
    next('/login')
  }
})

2.2.1 演示1- 有token, 页面随便进,如果清了token, 刷新页面,就跳转回 登录页

请添加图片描述

这里有个不好的体验,登陆成功了,还可以回退回去,当然你可以 通过 跳转时用replace 方法解决,虽然解决了,但是,想要的效果应该是:你回退到了登录页,如果登陆过了,就直接回到上个页面,而不是通过不把路由存入到路由栈的思路

2.2.2 演示2- 登陆成功了,用户还可以通过浏览器的回退按钮,返回到登陆页

请添加图片描述

2.3 解决上述问题

  • 跳转还是通过 push 方法去跳转
    只需要加个判断,即你不让它跳就行了, 即 next(false),也就是说,如果有token,就调用 next(false)
router.beforeEach((to, _, next) => {
  // 获取token
  const token = localStorage.getItem('token')
  if (to.path === '/login') {
    token && next(false)
    next()
  } else {
    // 判断有木有token
    token && next()
    next('/login')
  }
})

2.3.1 演示登陆过了不能再跳转到 登陆页

  • 这里退出的回调里,一定要清除token , 否则你跳转不回到登录页的,因为判读了有token, 就 next(false)了
    请添加图片描述

2.3.2 虽然解决了问题,但是新的bug又来了,如果你改变地址栏为login, 你会发现是空白,这是因为next(false),拦截了渲染

请添加图片描述

2.3.3 解决以上这个bug, 强制跳转回一个固定路径,确切的说,自己输入了地址栏路径,等于是强制刷新了,所以路径肯定是 ‘/’ [根据你自己定义路由的规则判断哦]

router.beforeEach((to, from, next) => {
  // 获取token
  const token = localStorage.getItem('token')
  if (to.path === '/login') {
    token && next(from.fullPath || '/')
    next()
  } else {
    // 判断有木有token
    token && next()
    next('/login')
  }
})

这样就解决了,最终效果演示

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1279583.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python----字典练习

相关链接:Python---字典的增、删、改、查操作_python中字典的增删改查-CSDN博客 Python---字典---dict-CSDN博客 Python---引用变量与可变、非可变类型-CSDN博客 重点: 字典中的 key (就是键)可以是很多数据类型(…

对比ProtoBuf和JSON的序列化和反序列化能力

1.序列化能力对比验证 在这里让我们分别使用PB与JSON的序列化与反序列化能力,对值完全相同的一份结构化数据进行不同次数的性能测试。 为了可读性,下面这一份文本使用JSON格式展示了需要被进行测试的结构化数据内容: {"age" : 20,"name…

SpringAMQP入门案例——接收消息

依赖 <!--SpringAMQP起步依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> yml配置文件 自行修改 spring:rabbitmq:host: 192.168.220.130 # …

Spring MVC学习随笔-控制器(Controller)开发详解:接受客户端(Client)请求参数

学习视频&#xff1a;孙哥说SpringMVC&#xff1a;结合Thymeleaf&#xff0c;重塑你的MVC世界&#xff01;&#xff5c;前所未有的Web开发探索之旅 第三章、SpringMVC控制器开发详解 3.1 核心要点 &#x1f4a1; 1. 接受客户端&#xff08;client&#xff09;请求参数[讲解] 2…

Linux脚本awk命令

目录 一. awk命令简介 1. awk版本 2. awk与vim的区别 3. awk与sed的区别 4. awk工作原理 5. awk格式 6. awk常用选项 二. awk基础用法 1. awk基础用法 2. BEGIN和END语句块 3. 指定分隔符 4. 首尾关键字 三. awk内置变量 1. FS变量 2. OFS变量 3. RS变量 4. NF…

【Unity动画】为一个动画片段添加事件Events

动画不管播放到那一帧&#xff0c;我们都可以在这里“埋伏”一个事件&#xff08;调用一个函数并且给函数传递一个参数&#xff0c;参数在外部设置&#xff0c;甚至传递一个物体&#xff09;&#xff01; 嗨&#xff0c;亲爱的Unity小伙伴们&#xff01;你是否曾想过为你的动画…

语言模型文本处理基石:Tokenizer简明概述

编者按&#xff1a;近年来&#xff0c;人工智能技术飞速发展&#xff0c;尤其是大型语言模型的问世&#xff0c;让 AI 写作、聊天等能力有了质的飞跃。如何更好地理解和利用这些生成式 AI&#xff0c;成为许多开发者和用户关心的问题。 今天&#xff0c;我们推出的这篇文章有助…

【小沐学Python】网络爬虫之lxml

文章目录 1、简介2、安装3、基本功能3.1 lxml.etree3.2 解析HTML网页3.3 读取并解析HTML文件3.4 提取所有a标签内的文本信息3.5 树迭代3.6 序列化3.7 元素以字典的形式携带属性3.8 元素包含文本 4、代码测试4.1 lxml解析网页4.2 使用xpath获取所有的文本4.3 使用xpath获取 clas…

TA-Lib学习研究笔记(二)——Overlap Studies上

TA-Lib学习研究笔记&#xff08;二&#xff09;——Overlap Studies 1. Overlap Studies 指标 [BBANDS, DEMA, EMA, HT_TRENDLINE, KAMA, MA, MAMA, MAVP, MIDPOINT, MIDPRICE, SAR, SAREXT, SMA, T3, TEMA, TRIMA, WMA]2.数据准备 get_data函数参数&#xff08;代码&#x…

mongoose学习记录

mongoose安装和连接数据库 npm i mongoose导入mongoose const mongoose require(mongoose) mongoose.set("strictQuery",true)连接数据库 mongoose.connect(mongodb:127.0.0.1:27017/test)设置回调 mongoose.connection.on(open,()>{console.log("连接成…

利用段落检索和生成模型进行开放域问答12.2

利用段落检索和生成模型进行开放域问答 摘要引言2 相关工作3 方法 摘要 事实证明&#xff0c;开放域问答的生成模型具有竞争力&#xff0c;无需借助外部知识。虽然很有希望&#xff0c;但这种方法需要使用具有数十亿个参数的模型&#xff0c;而这些模型的训练和查询成本很高。…

还在Wins 11怀念10的右键单击菜单?别担心,可通过注册表来实现

到目前为止&#xff0c;Windows 11最令人讨厌的新“功能”是右键单击任何内容时会出现截断的上下文菜单。以前版本的Windows显示了你的所有选项&#xff0c;包括可以打开文件的不同程序&#xff0c;而新菜单仅限于少数选项&#xff0c;不一定是你想要的。 例如&#xff0c;当我…

SHAP(五):使用 XGBoost 进行人口普查收入分类

SHAP&#xff08;五&#xff09;&#xff1a;使用 XGBoost 进行人口普查收入分类 本笔记本演示了如何使用 XGBoost 预测个人年收入超过 5 万美元的概率。 它使用标准 UCI 成人收入数据集。 要下载此笔记本的副本&#xff0c;请访问 github。 XGBoost 等梯度增强机方法对于具有…

C++ day48 打家劫舍

题目1&#xff1a;198 打家劫舍 题目链接&#xff1a;打家劫舍 对题目的理解 专业小偷偷盗房屋的钱财&#xff0c;每个房屋存放的金额用非负整数数组表示&#xff1b; 如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警&#xff1b; 不触动警报装置的情况…

吸积效应:为什么接口会越来越臃肿?我们从一个接口说起

欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章&#xff0c;主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等&#xff0c;同时欢迎大家加我微信「java_front」一起交流学习 1 从一个接口说起 1.1 初始接口 假设现在有一个创建订单接口&#xff1a; pub…

C语言每日一题(44)删除排序链表中的重复元素 II

力扣 82 删除排序链表中的重复元素 II 题目描述 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,3,4,4,5] 输出&#xff1a;[1,2,5]示…

mac安装解压缩rar后缀文件踩坑

mac默认能够解压缩zip后缀的文件&#xff0c;如果是rar后缀的自己需要下载相关的工具解压 下载地址&#xff1a; https://www.rarlab.com/download.htm mac我是因特尔芯片所以下载 x64 然后解压缩文件进入目录 rar中 将可执行文件 rar、unrar 移动到 /usr/local/bin目录下即…

【高效开发工具系列】jackson入门使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

ASP.NET Core MVC过滤器

1、过滤器分为授权过滤、资源访问过滤、操作方法&#xff08;Action&#xff09;过滤、结果过滤、异常过滤、终结点过滤。上一次咱们没有说异常过滤和终结点过滤&#xff0c;不过老周后面会说的。对这些过滤器&#xff0c;你有印象就行了。 2、所有过滤器接口都有同步版本和异…

可视化开源编辑器Swagger Editor本地部署并实现远程访问管理编辑文档

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 Swagger Editor本地接口文档公网远程访问1. 部署Swagge…