两步教你在Vue中设置登录验证拦截!

article/2025/10/6 14:40:33

Hello,你好呀,我是灰小猿,一个超会写bug的程序猿!

今天在做vue和springboot交互的一个项目的时候,想要基于前端实现一些只有登录验证之后才能访问某些页面的操作,所以在这里总结一下实现该功能的一个解决方案,

首先说一下我是如何判断是否已经登录的,

一、解决思路

由于在我的springboot后台采用的shiro+Jwt安全框架,所以会在登录之后反馈给前端一个token,并且前端会将该token进行存储,所以我是去查找浏览器中是否存在token,如果浏览器中存在token,则说明登录成功,可以访问相关页面;

如果没有token则说明没有登录,j就跳转到登录页面。为了简化操作,我将这个验证的过程进行了封装。

注意:使用这种方法进行验证的前提是你的前后端是通过shiro和token进行验证的,并且前端会存储服务器返回的token。

二、让浏览器存储服务器返回的token

首先来看一下服务器端返回的token是如何被我在前端页面中存储的。

首先我在store文件下的index.js文件中封装了一个SET_TOKEN方法,用来将token存储到浏览器,这样我们每次就都可以通过localStorage.getItem(“token”),来从本地拿到我们的token,同时封装了一个REMOVE_INFO方法,在当我们退出登录的时候,清空浏览器中的token信息。

store文件下的index.js中代码如下:

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)export default new Vuex.Store({state: {// token: "",//用户的信息可以直接从浏览器中取出来token: localStorage.getItem("token"),//反序列化操作userInfo: JSON.parse(sessionStorage.getItem("userInfo"))},mutations: {/**类似set操作*///给token赋值SET_TOKEN: (state, token) => {state.token = token;//将信息存储到浏览器中,以至于浏览器关闭时信息还在localStorage.setItem("token", token);},//给userinfo赋值SET_USERINFO: (state, userInfo) => {state.userInfo = userInfo;//session会在每次浏览器关闭时清空,在重新登录后再生成//由于sessionStorage不能存储对象,所以要将其存储成字符串的形式sessionStorage.setItem("userInfo", JSON.stringify(userInfo));},//移除用户信息REMOVE_INFO: (state) => {//移除用户信息时将用户所有的信息都置为空state.token = "";state.userInfo = {};localStorage.setItem("token", "");sessionStorage.setItem("userInfo", JSON.stringify(""));}},getters: {/**类似get请求*///获取用户信息getUser: state => {return state.userInfo;}},actions: {},modules: {}
})

三、在请求中设置访问权限

由于我们并不是所有的页面都只要在登录的时候才能访问,所以我们要对需要进行登录才能访问的页面设置访问权限,

在vue中我们一般将访问路由设置在router下的index.js文件中,对于需要添登录权限的请求路由,我们可以给其增加meta属性,在其中设置一个Boolean类型的属性requireAuth, 我们会以该属性是否为true来判断是否需要验证登录。

比如我们的BlogEdit页面只有在登录的时候才能访问,Login页面不需要登权限,那么我们就可以这样设置:(代码有删减,但是保留了核心部分,只是删除了部分路由。)

/*** 路由注册中心*/import Vue from 'vue'
import VueRouter from 'vue-router'//注册页面
import Login from '../views/Login.vue'
import BlogEdit from '../views/BlogEdit.vue'Vue.use(VueRouter)const routes = [{path: '/login',name: 'Login',component: Login},{path: '/blog/add',name: 'BlogAdd',component: BlogEdit,//添加权限访问,表示只有登录之后才能进行该操作meta: {requireAuth: true}},]const router = new VueRouter({mode: 'history',base: process.env.BASE_URL,routes
})export default router

这样在每次请求BlogEdit页面的时候都会进行判断。

四、封装登录验证

现在我们需要写一个方法来对我们刚才设置的属性进行验证。所以在src目录下新建一个permission.js文件,在其中进行封装。

思路是这样的: 首先我们拦截该请求,获取到该请求中的requireAuth参数,如果参数是true,那么就去获取浏览器中的token,验证当前是否是登录状态。如果存在token,就放行请求;如果没有获取到token,就跳转到登录页面。

注意:如果你是基于其他验证登录的,可以将
//获取到本地的token
const token =ocalStorage.getItem(“token”)
换成你的验证方式,但是思路都是一样的。

代码如下:

/*** 请求登录验证,如果没有登录,不能访问页面,返回到登录页面*/
import router from "./router";//路由判断登录,根据路由配置文件的参数
router.beforeEach((to,from,next)=>{//判断该路由是否需要登录权限//record.meta.requireAuth是获取到该请求中携带的该参数if (to.matched.some(record => record.meta.requireAuth)){//获取到本地的tokenconst token = localStorage.getItem("token")console.log("显示token----------:" + token)//判断当前的token是否存在,也就是登录时的tokenif (token){//如果指向的是登录页面,不做任何操作if (to.path === "/login"){}else {//如果不是登录页面,且token存在,就放行next()}}else {//    如果token不存在//    前往登录next({path:'/login'})}}else {//如果不需要登录认证,就直接访问next()}
})
最后别忘了将该页面引入到mian.js中。
//导入permission.js,用户进行前端的权限控制
import "./permission"

总结一下

主要的操作就是第三步和第四步,只要你在请求路由中设置了登录验证的参数,同时第四步写入了登录拦截验证,并且引入到的main.js文件中,就可以了!

至此通过前端验证登录拦截完成。
小伙伴们如果有不同的见解或方法,欢迎在评论区留言或私信我讨论!
我是灰小猿,我们下期见!

请添加图片描述


http://chatgpt.dhexx.cn/article/NDypyWHv.shtml

相关文章

HTTPS实战之单向验证和双向验证

(全文太长,太懒不想看,-_-b 那就直接拉到底部看总结 ) 前面的文章中,提到了,https是在TCP协议与http之间加了一个控制安全传输的SSL协议,也就是说,直接运行在TCP之上的HTTP是普通的…

验证基础-验证方法

目录 动态仿真 静态检查 虚拟模型 硬件加速 效能验证 UVM简介 验证的方法主要分为六种: ※ 动态仿真(dynamic simulation) ※ 静态检查(formal check) ※ 虚拟模型(virtual prototype) ※…

用Abp实现两步验证(Two-Factor Authentication,2FA)登录(一):认证模块

文章目录 原理用户验证码校验模块双因素认证模块改写登录项目地址 在之前的博文 用Abp实现短信验证码免密登录(一):短信校验模块 一文中,我们实现了用户验证码校验模块,今天来拓展这个模块,使Abp用户系统支…

用Abp实现两步验证(Two-Factor Authentication,2FA)登录(二):Vue网页端开发

文章目录 发送验证码登录退出登录界面控件获取用户信息功能项目地址 前端代码的框架采用vue.js elementUI 这套较为简单的方式实现,以及typescript语法更方便阅读。 首先添加全局对象: loginForm: 登录表单对象 twoFactorData: 两步验证数据&#xff0…

快速接入Google两步认证Google Authenticator

(一)介绍 既然来看该文章就应该知道Google的两步认证是干什么的,这边再提供一次app的下载链接 (apkpure搜索谷歌身份验证器) 验证原理讲解: 在数据库中查找该登陆用户之前绑定的32位随机码(该码一般会存入数据库)调用API传入32位…

两步验证 非双重认证

Two-factor authentication must be turned on for your Apple ID. After you turn it on, signing into your developer account will require both your password and access to your trusted devices or trusted phone number. 今天Xcode 真机调试, 突然不正常了. 本着热爱…

google账号异步新设备登录需要两次两步验证问题

备注:华为手机,在谷歌三件套插件已经下载的情况下,还是无法收到数字点击验证 先说下现象,比如你的谷歌账号从别人那购买的,然后辅助电话与邮箱已经全部替换成了自己的信息,一般为了安全我们会开启两步验证&…

谷歌两步验证器身份怎么开Authenticator安卓app下载安装方法教程

国内互联网公司一般采取手机收验证码的方式对账号进行身份验证,增强账号的安全性。但是在国外通常采取使用谷歌两步身份验证器 (Google Authenticator),谷歌谷歌两步身份验证器的方便之处主要体现在: 1.在无网络的情况下也可以使用…

如何开发两步验证功能

什么是两步验证 两步验证,是指用户登录账户的时候,除了要输入用户名和密码,还要求用户输入一个动态密码,为帐户添加了一层额外保护。这个动态密码要么是专门的硬件,要么由用户手机APP提供。即使入侵者窃取了用户密码&a…

兩步验证的原理

被盗号 “您的账号密码有误,请重新输入” 小卢盯着电脑屏幕看了5分钟,心里纳闷,昨天还能登录,怎么今天就密码错误了,难不成我被盗号了?想到这里,小卢赶紧给自己的程序员好友小王打电话。 小卢:“小王,我在XX网站的账号被盗了!” 小王:“确定被盗了?赶紧把密码找…

(01)Webrtc::Fec与Nack的二三事

写在前面:要理解Fec与Nack逻辑,我喜欢先从接受端看, 理解了Fec与Nack是如何被使用的,才能更好的明白不同的机制应该怎么用,在什么场合用。 更新丢包逻辑 void PacketBuffer::UpdateMissingPackets(uint16_t seq_num)…

Channel closed; cannot ack/nack

再一次用rabbmitmq的时候遇到了 Channel closed; cannot ack/nack的异常信息,这个可能是因为rabbmitmq默认的模式是自动ack,我没有配置手动ack 然后在代码里又basicack了。 MessageProperties properties message.getMessageProperties();l…

简述WebRTC中的丢包重传Nack的实现

一 简述 接收端发现序列号不连续,发送RTCP FB Nack包,发送端从历史队列中查找该包,再发送RTP包,但WebRTC用的RTX重发该包,ssrc和原视频流不同,pt也不同。 artpmap:96 H264/90000 artcp-fb:96 goog-remb a…

WEBRTC浅析(五)视频Nack包的发送判断逻辑以及数据流

这篇文章是对webrtc 中Nack包发送机制的梳理,主要包括三个部分: 第一部分,介绍RTCP包中,Nack包的规范。 第二部分,介绍在WEBRTC中,Nack发送机制的数据流程图。 第三部分,介绍在WEBRTC中&#xf…

RabbitMQ的ack和nack机制

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、ACK机制二、主动ACK三、手动ACK四、Nack机制五、MQ unack的影响总结 前言 本文主要讨论RabbitMQ消费者的ack和nack机制,并且关注ack和nack使用…

RTCP 协议的 NACK 报文

接收方定时把所有未收到的包序号通过反馈报文通知到发送方进行重传。 相对 ARQ带来的改进:减少的反馈包的频率和带宽占用,同时也能比较及时地通知发送方进行丢包重传。 NACK 报文的定义在 [rfc4585] 文档中定义。 RTCP 的反馈报文包头定义如下&#x…

webrtc nack实现原理

1.nack 简介 webrtc 中nack是最基本的QOS策略,与ack机制不同的地方是nack是接收端检测到丢包时,告知发送端具体丢包的序号,接收端收到nack后从缓存中找到对应的包并发送出去。 2. nack实现 nack rtcp报文格式如上图所示,pt205。P…

webrtc QOS方法一(NACK实现)

一:概述 NACK则在接收端检测到数据丢包后,发送NACK报文到发送端;发送端根据NACK报文中的序列号,在发送缓冲区找到对应的数据包,重新发送到接收端。NACK需要发送端发送缓冲区的支持,RFC5104[2]定义NACK数据包…

认识网络通信中的 ACK、NACK 和 REX

ACK、NACK、 REX在面试或者网络通信的时候,我们可能经常听到和遇到。今天就来详细介绍一下ACK、NACK、 REX。 认识ACK、NACK、 REX ACK:Acknowledgement,它是一种正向反馈,接收方收到数据后回复消息告知发送方。NACK&#xff1a…

WebRTC之NACK、RTX 在什么时机判断丢包发送NACK请求和RTX丢包重传

WebRTC之NACK、RTX 在什么时机判断丢包发送NACK请求和RTX丢包重传 WebRTC之NACK、RTX 在什么时机判断丢包发送NACK请求和RTX丢包重传 WebRTC之NACK、RTX 在什么时机判断丢包发送NACK请求和RTX丢包重传前言一、NACK与RTX的作用1、NACK/RTX的工作机制的流程图2、NACK/RTX涉及到的…