前端token知识梳理:token如何存储?token过期如何处理?如何无感知刷新token?

article/2025/7/22 7:44:51
在前后端是以token(令牌)的形式交互的,既然是token,是有过期时间的(为了接口数据的安全,	
服务器的token不会设置太久,根据需要一般是1-7天),没有一个token是永久的,永久的token相当
于一串永久密码,是不安全的。

登录场景:
在这里插入图片描述
既然token有过期时间,那么问题来了:

一、前后端交互过程中token如何存储?
1.存在cookie中

cookie的大小约4k,兼容性在IE6以及以上都兼容,在浏览器和服务器之间来回传递,因此他得在服务器的环境下运行,而且可以设置过期时间,默认过期时间是session会话结束。

2.存在localstorage中

localstorage的大小约5M,兼容性在IE7以上都兼容,有浏览器就可以,不需要在服务器环境下运行,会一直存在,除非手动清除。

二、token过期时,前端如何处理?
1.跳回登录页面重新登录(不推荐)

在vue中我们可以在axios拦截器中这样写:
instance.interceptors.response.use(function (response) {// 对响应数据做点什么return response.data},function (error) {if (error.response) {if (error.response.status === 401) {Message.error('登陆过期请重新登陆!')setToken('')router.push({name: 'login'})}}}// 对响应错误做点什么return Promise.reject(error.response)}
)

2.重新获取token

出于本文的目的,我们将关注最常见的两种令牌类型:访问令牌和刷新令牌。
no.1访问令牌携带必要的信息以直接访问资源。换句话说,当客户端将访问令牌传递给管理资源的服
务器时,该服务器可以使用令牌中包含的信息来决定客户端是否被授权。访问令牌通常具有到日期
并且是短暂的。

在这里插入图片描述

no.2刷新令牌包含获取新访问令牌所需的信息。换句话说,每当访问令牌需要访问特定资源时,客户
端可以使用刷新令牌来获得由认证服务器发布的新访问令牌。常见用例包括在旧的访问令牌过期后
获取新访问令牌,或者首次访问新资源。刷新令牌也可以过期,但相当长寿。刷新令牌通常受到严
格的存储要求,以确保它们不会泄露。

在这里插入图片描述

总结:服务器生产token的过程中,会有两个时间,一个token失效时间,一个是token刷新时间;
刷新时间比失效时间长,当用户的token过期时,你可以拿着过期的token去换新的token,来保持用
户的登录状态,当然你这个过期token的过期时间必须在刷新时间之内,如果超出了刷新时间,那么	
返回仍然是401。

在这里插入图片描述

三、如何实现无感知刷新?

1.在axios的拦截器中加入token刷新逻辑;
2.当用户token过期时,去向服务器请求新的token;
3.将旧的token替换为新的token;
4.继续用户当前的请求;
 // 在axios的拦截器中加入token刷新逻辑:instance.interceptors.response.use(function(response){// 对响应数据做些什么return response.data;},function(error){if(error.response){if(error.response.status===401){//  如果当前路由不是login,并且用户有记住密码操作,那么去请求刷新tokenif(router.currentRoute.name!=='login'){if(getRemember()&&getRefreshToken()){return doRequest(error)}else{Message.error('登录过期请重新登录!')setToken('')router.push({name:'login'})}}}}// 对响应错误做些什么return Promise.reject(error.response)})async function doRequest(error){const data = await store.dispatch('refreshToken');let {token_type:tokenType,access_token:accessToken}=data;let token = tokenType+accessToken;let config = error.response.config;config.headers.Authorization = token;const res = await axios.request(config)return res}// refreshToken中重新设置了token和refresh_Tokencommit('setToken',{token,expiresIn})setRefresToken(token,refreshThl/(60*60*24))
总结:
弄两个token,一个负责鉴权token:access_token,一个负责刷新得token:refresh_token,每次请求带上这两个token,后端拦截器判断,先判断鉴权token是否有效,如果有效允许访问,如果过期,就判断刷新token是否有效,如果有效,返回指定状态码,然后让前端根据这个状态码去调用刷新token接口。如果刷新token失效,就提示需要重新登录!

整体思路
在这里插入图片描述


http://chatgpt.dhexx.cn/article/12phAia9.shtml

相关文章

处理token过期的问题,无感知刷新token

401错误的场景 有如下两种情况会出现401错误: 未登陆用户做一些需要权限才能做的操作,代码会报出401错误。这种情况下,应该让用户回到登陆页。登录用户的token过期了 整体目标是:通过axios响应拦截器来处理401问题。 理解toke…

前端怎么判断token过期或无token问题

有如下两种情况会出现401错误: 未登陆用户做一些需要权限才能做的操作(例如:关注作者),代码会报出401错误。这种情况下,应该让用户回到登陆页。登录用户的token过期了 ( token会有有效期(具体是…

react中 token过期,如何处理?

思路:首先在request.js中的响应拦截器这块写token失效的提示,然后再让它进行清空token和路由跳转 第一步:在request.js文件中 导入 import store from /store import { logout } from /store/actions/login 第二步:在响应拦截器…

token 过期解决

vue如何在token过期之后跳转到登录页面,且不影响其他无需携带token的接口数据访问 事情是这样的,最近做了一个类似于商城的项目。本来测试是没有问题的,后来过了大概三四天的时间没有在浏览器中打开过,再打开以后,在未…

前端token知识梳理:token如何存储?token过期如何处理?如何无感刷新token?

在前后端是以token的形式交互,既然是token,那么肯定有它的过期时间(为了接口数据的安全,服务器的token一般不会设置太长,根据需要一般是1-7天的样子),没有一个token是永久的,永久的token就相当于一串永久的…

token过期怎么办 无感刷新token

(1)可以通过响应拦截器或者全局前置守卫强制跳转登录页 // 全局前置守卫 router.beforeEach((to, from) > {let token sessionStorage.token;if (token) {return true} else {return { name: Login, query: { redirect: to.fullPath } };} }) // 添…

关于 Token 过期问题的两种解决方案

对于token过期,我们有两种方案: 方案一:当我们操作某个需要token作为请求头的接口时,返回的数据错误error.response.status 401,说明我们的token已经过期了。 我们希望当响应返回的数据是401身份过期时,让…

Latex 符号(Symbols)

Latex符号广泛用于数百个类别的不同主题中。对于数学或其他学科中使用的每个符号,将使用相应的命令。本主题将为您提供有关符号的详细概念和说明,以及以哪种方式可以使用所有符号。 使用标准文本,您可以使用任何符号。这种方法不仅节省了精力…

Latex特殊符号汇集

原文链接:https://blog.csdn.net/ying_xu/article/details/51240291 这段时间用Latex很多,常常需要查阅相关特殊的符号,这里做一个整理,也方便大家查阅。 摘自:《一份不太简短的LATEX2介绍》或112分钟学会LATEX2 原…

(13.1)Latex符号、公式及伪代码

文章目录 一、符号大全和小工具1、符号大全2、小工具(1)图片转Latex(2)在线Latex公式编辑 二、公式格式三、伪代码四、注意事项1、符号宏包2、颜色宏包3、换段未缩进4、单引号和双引号 一、符号大全和小工具 1、符号大全 Latex …

LaTex常见数学符号与示例

在写文档或者博客过程中,数学公式是最难表示的,比如根号,下标号,分号,还有绝对值的表示,复杂一些的比如矩阵的表示,积分的表示,求和公式。 LaTex提供了丰富的表示方法,用…

Latex数学符号对应表

Latex数学符号对应表 - 叮叮当当sunny - 博客园 目录 1. 希腊字母2. 运算符符号3. 关系符号4. 箭头符号5. 括号符号6. 其他符号7. MATLAB 回到顶部 1. 希腊字母 字母实现字母实现αα\alphaAA\Alphaββ\betaBB\Betaγγ\gammaΓΓ\Gammaδδ\deltaΔΔ\Deltaϵϵ\epsilon…

LateX各种命令符号

函数、符号及特殊字符 声调 语法效果语法效果语法效果\bar{x}\acute{\eta}\check{\alpha}\grave{\eta}\breve{a}\ddot{y}\dot{x}\hat{\alpha}\tilde{\iota} 函数 语法效果语法效果语法效果\sin\theta\cos\theta\tan\theta\arcsin\frac{L}{r}\arccos\frac{T}{r}\arctan\frac{L}{…

Latex特殊符号大全(高清)

Latex符号大全 转载内容供自己阅读 原文:Latex特殊符号大全(高清)

Latex常见符号对照表

摘要: Latex可以很方便的利用命令来生成各式各样的特殊符号. 这里根据官方的文档将这些常见符号列出, 以备查用. B.1 希伯来和希腊字母(Hebrew and Greek letters) 希伯来语: 希腊语: 数学表达式中常常用下面的这些符号, 分小写/大写 B.2 二元关系符(Binary relations) …

LaTeX最全的数学符号大全(更新中…… )

文章目录 1 基本字符常用数集字母字母加标表示希腊字母 2 四则运算运算符号等号比较范围 3 常用函数4 离散数学运算符5 集合集合表示集合操作集合关系 最后更新于2020/12/02 1 基本字符 常用数集字母 符号 LaTeX \LaTeX LATE​X符号说明示例 N \mathbb{N} N\mathbb{N}自然数集…

Latex所有常用数学符号吐血整理(包含大括号、等式对齐、矩阵)

果然是自己搞一个查起来会方便一些,最近天天写数学题解,全是公式 ~ 希腊字母: 字母名称国际音标大写字母小写字母字母名称国际音标大写字母小写字母alpha/lfə/Ααnu/nju:/Ννbeta/bi:tə/或 /beɪtə/Ββxi希腊 /ksi/;英美 …

LaTeX 符号命令大全

函数、符号及特殊字符 声调 语法效果语法效果语法效果\bar{x} \acute{\eta} \check{\alpha} \grave{\eta} \breve{a} \ddot{y} \dot{x} \hat{\alpha} \tilde{\iota} 函数 语法效果语法效果语法效果\sin\theta \cos\theta \tan\theta \arcsin\frac{L}{r} \arc…

LaTeX 各种命令,符号

转载下来用于学习。转自: https://blog.csdn.net/anxiaoxi45/article/details/39449445 函数、符号及特殊字符 声调 语法效果语法效果语法效果\bar{x}\acute{\eta}\check{\alpha}\grave{\eta}\breve{a}\ddot{y}\dot{x}\hat{\alpha}\tilde{\iota} 函数 语法效果语法效…