前端401错误 解决方法:响应拦截器

article/2025/9/17 5:55:39

目录

1.该问题出现的原因

2.处理401问题的解决方案原理

3.使用响应拦截器解决问题


1.该问题出现的原因

在前后端分离项目中,最常见的是前端点击登录后,后端返回token字符串,这个token可以看作是一个“令牌”,就比如你去酒店办理入住后,拿到的房卡,那代表你有着进去房间的权限。


1. 登录用户的token过期 

token是具有时效性的,生活中,如你登录腾讯视频,接下来几天你再登录就不用输入账号密码,而时间很长如半个月后,你还要重新输入账号密码登录,这个过程就是token过期。

具体多久过期,一般是和后端商量着来,后台管理类项目如企业内部的项目为了安全性且并不会过多的考虑用户体验,一般设为很短或者干脆不做这个。

而像腾讯视频,淘宝,京东之类的商业类项目需要考虑用户体验,且对于安全性要求并不高,一般设置为7~14天比较合适。


2. 用户未登录情况,返回401错误,应该回到登录页(这个不一定是401错误)


3.小结:很普遍的功能,80%的项目都会做这个功能


2. 处理401问题的解决方案原理


完整的逻辑为: 

 前端请求接口api --> 返回401错误 --> 前端判断是否有refresh_token -->如果有就用refresh_token请求新的token --> 后台成功返回一个新的token给我们 --> 更新vuex+本地存储持久化 --> 然后重新发送请求 --> 带上新的token请求数据

当然,如果没有refresh_token就老老实实去登录吧!



 

方案: 目前常见的处理方式是:当用户登陆成功之后,返回的token中有两个值


原理:一个是token,他的有效期是2小时(举例),一个是姑且称为refresh_token,他的有效期长,比如是14天,假设用户登录后2小时后,token过期了,那么我们看一下refresh_token在不在,在的话,就用refresh_token再次发送,后端会返回一个新的token。


核心点:1.解决401问题重点在于让用户“无感”,也就是说用户不知道token过期也不需要用户再次登录,需要的是我们程序员去处理。

               2.解决这个问题的地方在响应拦截器


3.使用响应拦截器解决问题


3.1 作用

所有从后端回来的响应都会集中进入响应拦截器中,如果发生401错误就可以解决

 

 


 

以下是我封装的响应拦截器(可以通用),主要完成两件事:

处理401问题,以及注入token

import router from '../router/auth.js'// 响应拦截器
request.interceptors.response.use(function (response) {console.log('响应拦截器', response)return response
}, async function (error) {// 如果发生了错误,判断是否是401console.dir(error)if (error.response.status === 401) {// 出现401就在这里面 开始处理 ---console.log('响应拦截器-错误-401')const refreshToken = store.state.tokenInfo.refresh_token// if (有refresh_token) {       ---- 有refresh_tokenif (refreshToken) {// 1. 请求新tokentry {const res = await axios({url: 'http://localhost:8000/v1_0/authorizations',method: 'PUT',headers: {Authorization: `Bearer ${refreshToken}`}})console.log('请求新token', res.data.data.token)// 2. 保存到vuexstore.commit('mSetToken', {   // mSetToken是前面定义的mutations名字refresh_token: refreshToken,token: res.data.data.token})// 3. 重发请求//    request是上面创建的axios的实例,它会自动从vuex取出token带上return request(error.config)} catch (error) {// 1. 清除tokenstore.commit('mSetToken', {})  // 2. 去到登录页(如果有token值,就不能到login)const backtoUrl = encodeURIComponent(router.currentRoute.fullPath)router.push('/login?backto=' + backtoUrl)  return Promise.reject(error) }} else {// 如果没有refresh_token的时候   ----没有refresh_token// 1.去到登录页// 2.清除tokenstore.commit('mSetToken', {})const backtoUrl = encodeURIComponent(router.currentRoute.fullPath)  // 回到原来跳过来的的页面,不加?后面的一串就会到首页router.push('/login?backto=' + backtoUrl)return Promise.reject(error)  // 返回错误信息}} else {return Promise.reject(error)}
})


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

相关文章

解密网站401错误:了解发生原因和修复方法

​  每个网站都会有不同的错误码,其中,401错误被认为是相对常见的错误码。那么,什么是网站401错误呢?在摸清了这一点之后,我们也需要学习一下如何解决它。 什么是 401 状态码? 401 状态代码是 Web 服务器发送给浏览器的 HTTP …

401 错误原因和解决方案

401.1 您未被授权查看该页 HTTP 错误 401.1 - 未经授权:访问由于 凭据无效被拒绝。 出现问题的原因: 计算机用户名ftpname帐号的密码和IIS中记录的不一致。 出现这个问题的原因就是手工到IIS中修改了用户的登录密码,从而导致计算机用户名…

401错误 解决方法:响应拦截器

关于401错误 401错误场景 1. 用户未登录,代码报401,应该回到登录页 2. 登录用户的token过期 : 怎样理解token过期? . 就是登录成功了以后,后端会返回一个token值,这个值在后续请求时带上(就像是开门钥匙), 但是,这个值一般会有有效期(具…

点到超平面的距离公式

超平面: 第一步:求出超平面的法向量 超平面上任意两点, 则向量一定垂直于该超平面的法向量。这两点满足: 两式相减: 就是向量,由此可以看出超平面的法向量就是向量 第二步:求出点到超平面的距离r 假设…

模式识别中的最优分类超平面与线性支持向量机

模式识别中的最优分类超平面与线性支持向量机 本章的内容需要你理解一下的基础知识。 模式识别部分:线性分类器基本概念、感知器 数学基础部分:拉格朗日乘子法、拉格朗日对偶问题 当然,以上的基础知识不需要你现在就看,可以在阅…

平面、超平面的法线,平行超平面的距离

1. 法线 一个平面或超平面由一个方程(不是一组方程)定义: { x ∣ a T x b } \{x\mid a^Txb\} {x∣aTxb} 其中 a a a 是一个非零的列向量,而 b b b 是一个实数。那么它的法线(垂线)向量是 a a a。 例如…

如何理解超平面?

超平面的公式 首先明确几个定义:(1) 超平面是指n维线性空间中维度为n-1的子空间。它可以把线性空间分割成不相交的两部分。比如二维空间中,一条直线是一维的,它把平面分成了两块;三维空间中,一个平面是二维的&#xf…

支持向量所在超平面方程_如何用python绘制超平面支持向量机?

一个完整的例子 import numpy as np import matplotlib.pyplot as plt def __intersect(rect, line): l = [] xmin,xmax,ymin,ymax = rect a,b,c = line assert a!=0 or b!=0 if a == 0: y = -c/b if y<=ymax and y>=ymin: l.append((xmin, y)) l.append((xmax, y)) retu…

SVM(四):超平面详细解释

目录 背景定义超平面方程推导平面直线方程空间平面方程超平面 点到超平面的距离推导点到平面直线的距离点到空间平面的距离超平面 判断超平面的正反 背景 关于超平面的介绍&#xff0c;网上的博客资料太多了&#xff0c;然而真正简洁易懂、切中要害的实在是太少了&#xff0c;…

【支持向量机】最大间隔超平面及Matlab代码

线性可分 在特征空间中&#xff0c;有两个训练样本可以通过一条直线区分开&#xff0c;则称为线性可分。而在特征空间大于等于四维时&#xff0c;分开训练样本的平面&#xff0c;称为超平面。 我们定义一条直线方程&#xff1a; ω 1 x 1 ω 2 x 2 b 0 ω_1x_1ω_2x_2b0 …

第三节- 超平面

这一节我们来讲一个新的东西&#xff0c;叫做 超 平面( hyper-plane)。 其实这个东西本身并不难理解。 只是我们在三维直角坐标系里面习惯了 直线 平面什么的&#xff0c;可能有些疑惑而已。 老规矩&#xff0c;我们先甩出定义&#xff1a; 超平面 hyperplane 看起来&am…

躺平国历险记:两个超平面之间距离的计算

王二麻听说躺平国是一个非常神奇的地方。在躺平国里&#xff0c;有各种神奇的东西。比如&#xff1a;会说话的铁片&#xff0c;能够分拣垃圾的小狗&#xff0c;还有会唱京剧的电线杆子。 王二麻的表哥张三李是一个糙汉子&#xff0c;他前几年在国内混不下去了&#xff0c;一个…

SVM超平面的理解

超平面的理解 超平面的定义 超平面是n维欧氏空间中(n-1)维度的子空间&#xff0c;例如3维空间的“超平面”就是一个面&#xff0c;但通常超过3维空间之后我们才称之为超平面&#xff0c;是纯粹的数学概念&#xff0c;不是现实的物理概念。公式表示为1-1&#xff0c;W、x是一个…

SVM原理:超平面方程

&#xff08;1&#xff09;超平面方程 3维空间中平面方程的一般形式&#xff1a; (1) 我们都知道为平面到原点的距离。这里简单证明超平面的法向量为。 d维空间平面方程的一般形式&#xff1a; (2) 平面的法向量为&#xff0c;&#xff08;分号表示列向量&#xff09;。 &…

SVM——超平面

转载出处&#xff1a;超平面是什么&#xff1f;——理解超平面&#xff08;SVM开篇之超平面详解&#xff09; 引入 n维空间的超平面由下面的方程确定&#xff1a; w T x b 0 w^Tx b 0 wTxb0 其中&#xff0c; w w w和 x x x都是n维列向量&#xff0c; x x x为平面上的点…

超平面详解

学习SVM绕不开超平面的概念。先复习一些基础的概念&#xff08;平面方程&#xff09;&#xff0c;帮助理解。 1. 平面及其方程&#xff1a; 因为平面与空间直线分别是曲面与空间曲线的特例&#xff0c;所以在讨论平面与空间直线以前&#xff0c;先引入有关曲面方程与空间曲线方…

轻松理解超平面

前言 定义&#xff1a; 1、超平面是指n维线性空间中维度为n-1的子空间。它可以把线性空间分割成不相交的两部分。比如二维空间中&#xff0c;一条直线是一维的&#xff0c;它把平面分成了两块&#xff1b;三维空间中&#xff0c;一个平面是二维的&#xff0c;它把空间分成了两块…

SVM理论疏导——什么是超平面

超平面概念 超平面是一种数学上的概念&#xff0c;它是线上的一个点&#xff0c;也是平面上的一条直线&#xff0c;也是三维空间的一张平面。前面说的点、线、平面都可以是超平面&#xff0c;但一般都不叫为超平面&#xff0c;因为超平面是点、线、平面的推广&#xff0c;即大于…

3、如何理解超平面?

参考&#xff1a;https://zhuanlan.zhihu.com/p/145706435 首先明确几个定义&#xff1a;(1) 超平面是指n维线性空间中维度为n-1的子空间。它可以把线性空间分割成不相交的两部分。比如二维空间中&#xff0c;一条直线是一维的&#xff0c;它把平面分成了两块&#xff1b;三维…

计算机内存与主存的关系(内存是主存吗?内存和主存有什么关系?)

在80386以上档次的微机中配置了高速缓冲存储器(Cache)&#xff0c;这时内存包括主存与高速缓存两部分。 计算器内存条采用的是DRAM(动态随机存储器)&#xff0c;即计算机的主存。通常所说的内存容量即指内存条DRAM的大小。 高速缓冲存储器Cache主要是为了解决CPU和主存速度不匹…