电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

js項目中前端如何實現無感刷新token

瀏覽:4日期:2022-06-12 15:17:41
目錄環境問題現象原因切入點操作流程1、處理 axios 響應攔截2、封裝 refreshToken 邏輯總結

前一陣遇到了一個問題,線上平臺有時會出現用戶正在使用的時候,突然要用戶去進行登錄,這樣會造成很不好的用戶體驗,但是當時一直沒有好的思路因此擱置了下來;通過零散時間查詢資料以及思考,最終解決了這個問題,接下來跟大家分享一下!

環境請求采用的 Axios V1.3.2。平臺的采用的 JWT(JSON Web Tokens) 進行用戶登錄鑒權。(拓展:JWT 是一種認證機制,讓后臺知道該請求是來自于受信的客戶端;更詳細的可以自行查詢相關資料)問題現象

線上用戶在使用的時候,偶爾會出現突然跳轉到登錄頁面,需要重新登錄的現象。

原因突然跳轉到登錄頁面,是由于當前的 token 過期,導致請求失敗;在 axios 的響應攔截axiosInstance.interceptors.response.use中處理失敗請求返回的狀態碼 401,此時得知token失效,因此跳轉到登錄頁面,讓用戶重新進行登錄。平臺目前的邏輯是在 token 未過期內,用戶登錄平臺可直接進入首頁,無需進行登錄操作;因此就存在該現象:用戶打開平臺,由于此時 token 未過期,用戶直接進入到了首頁,進行其他操作。但是在用戶操作的過程中,token 突然失效了,此時就會出現突然跳轉到登錄頁面,嚴重影響用戶的體驗感!(注:目前線上項目中存在數據大屏,一些實時數據的顯示;因此存在用戶長時間停留在大屏頁面,不進行操作,查看實時數據的情況)切入點怎樣及時的、在用戶感知不到的情況下更新token?當 token 失效的情況下,出錯的請求可能不僅只有一個;當失效的 token 更新后,怎樣將多個失敗的請求,重新發送?操作流程

好了!經過了一番分析后,我們找到了問題的所在,并且確定了切入點;那么接下來讓我們實操,將問題解決掉。

前要:

1、我們僅從前端的角度去處理。2、后端提供了兩個重要的參數:accessToken(用于請求頭中,進行鑒權,存在有效期);refreshToken(刷新令牌,用于更新過期的 accessToken,相對于 accessToken 而言,它的有效期更長)。

1、處理 axios 響應攔截

注:在我實際的項目中,accessToken 過期后端返回的 statusCode 值為 401,需要在axiosInstance.interceptors.response.use 的 error回調中進行邏輯處理。

// 響應攔截axiosInstance.interceptors.response.use( (response) => { return response; }, (error) => { let { data, config } = error.response; return new Promise((resolve, reject) => { /** * 判斷當前請求失敗 * 是否由 toekn 失效導致的 */ if (data.statusCode === 401) { /** * refreshToken 為封裝的有關更新 token 的相關操作 */refreshToken(() => { resolve(axiosInstance(config));}); } else {reject(error.response); } }) })我們通過判斷statusCode來確定,是否當前請求失敗是由token過期導致的;使用 Promise 處理將失敗的請求,將由于 token 過期導致的失敗請求存儲起來(存儲的是請求回調函數,resolve 狀態)。理由:后續我們更新了 token 后,可以將存儲的失敗請求重新發起,以此來達到用戶無感的體驗2、封裝 refreshToken 邏輯

要點:

存儲由于token過期導致的失敗的請求。更新本地以及axios中頭部的token。當 refreshToken 刷新令牌也過期后,讓用戶重新登錄。// 存儲由于 token 過期導致 失敗的請求let expiredRequestArr: any[] = [];/** * 存儲當前因為 token 失效導致發送失敗的請求 */const saveErrorRequest = (expiredRequest: () => any) => { expiredRequestArr.push(expiredRequest);}// 避免頻繁發送更新 let firstRequre = true;/** * 利用 refreshToken 更新當前使用的 token */const updateTokenByRefreshToken = () => { firstRequre = false; axiosInstance.post( '更新 token 的請求', ).then(res => { let { refreshToken, accessToken } = res.data; // 更新本地的token localStorage.setItem('accessToken', accessToken); // 更新請求頭中的 token setAxiosHeader(accessToken); localStorage.setItem('refreshToken', refreshToken); /** * 當獲取了最新的 refreshToken, accessToken 后 * 重新發起之前失敗的請求 */ expiredRequestArr.forEach(request => { request(); }) expiredRequestArr = []; }).catch(err => { console.log('刷新 token 失敗err', err); /** * 此時 refreshToken 也已經失效了 * 返回登錄頁,讓用戶重新進行登錄操作 */ window.location.href = `${HOME_PAGE}/login`; })}/** * 更新當前已過期的 token * @param expiredRequest 回調函數,返回由token過期導致失敗的請求 */export const refreshToken = (expiredRequest: () => any) => { saveErrorRequest(expiredRequest); if (firstRequre) { updateTokenByRefreshToken(); }}總結

經過一波分析以及操作,我們最終實現了實際項目中的無感刷新token,最主要的是有效避免了:用戶在平臺操作過程中突然要退出登錄的現象(尤其是當用戶進行信息填寫,突然要重新登錄,之前填寫的信息全部作廢,是很容易讓人發狂的)。

到此這篇關于js項目中前端如何實現無感刷新token的文章就介紹到這了,更多相關js 無感刷新token內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
主站蜘蛛池模板: 变压器配件,变压器吸湿器,武强县吉口变压器配件有限公司 | 中山市派格家具有限公司【官网】 | 【德信自动化】点胶机_全自动点胶机_自动点胶机厂家_塑料热压机_自动螺丝机-深圳市德信自动化设备有限公司 | 袋式过滤器,自清洗过滤器,保安过滤器,篮式过滤器,气体过滤器,全自动过滤器,反冲洗过滤器,管道过滤器,无锡驰业环保科技有限公司 | 阴离子_阳离子聚丙烯酰胺厂家_聚合氯化铝价格_水处理絮凝剂_巩义市江源净水材料有限公司 | 防潮防水通风密闭门源头实力厂家 - 北京酷思帝克门窗 | 土壤养分检测仪_肥料养分检测仪_土壤水分检测仪-山东莱恩德仪器 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 山东风淋室_201/304不锈钢风淋室净化设备厂家-盛之源风淋室厂家 翻斗式矿车|固定式矿车|曲轨侧卸式矿车|梭式矿车|矿车配件-山东卓力矿车生产厂家 | 曙光腾达官网-天津脚手架租赁-木板架出租-移动门式脚手架租赁「免费搭设」 | 上海软件开发-上海软件公司-软件外包-企业软件定制开发公司-咏熠科技 | 金属切削液-脱水防锈油-电火花机油-抗磨液压油-深圳市雨辰宏业科技发展有限公司 | Trimos测长机_测高仪_TESA_mahr,WYLER水平仪,PWB对刀仪-德瑞华测量技术(苏州)有限公司 | LED显示屏_LED屏方案设计精准报价专业安装丨四川诺显科技 | 深圳湾1号房价_深圳湾1号二手房源| 智慧农业|农业物联网|现代农业物联网-托普云农物联网官方网站 | 康明斯发电机,上柴柴油发电机,玉柴柴油发电机组_海南重康电力官网 | 周易算网-八字测算网 - 周易算网-宝宝起名取名测名字周易八字测算网 | 专业广州网站建设,微信小程序开发,一物一码和NFC应用开发、物联网、外贸商城、定制系统和APP开发【致茂网络】 | 泵阀展|阀门展|水泵展|流体机械展 -2025上海国际泵管阀展览会flowtech china | 蓝莓施肥机,智能施肥机,自动施肥机,水肥一体化项目,水肥一体机厂家,小型施肥机,圣大节水,滴灌施工方案,山东圣大节水科技有限公司官网17864474793 | 量子管通环-自清洗过滤器-全自动反冲洗过滤器-北京罗伦过滤技术集团有限公司 | 防水套管厂家_刚性防水套管_柔性防水套管_不锈钢防水套管-郑州中泰管道 | 大数据营销公司_舆情监测软件_上海SEO公司-文军营销官网 | 深圳办公室装修,办公楼/写字楼装修设计,一级资质 - ADD写艺 | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 | 空冷器|空气冷却器|空水冷却器-无锡赛迪森机械有限公司[官网] | Dataforth隔离信号调理模块-信号放大模块-加速度振动传感器-北京康泰电子有限公司 | 空冷器|空气冷却器|空水冷却器-无锡赛迪森机械有限公司[官网] | 塑钢件_塑钢门窗配件_塑钢配件厂家-文安县启泰金属制品有限公司 深圳南财多媒体有限公司介绍 | 液压升降货梯_导轨式升降货梯厂家_升降货梯厂家-河南东圣升降设备有限公司 | 杰恒蠕动泵-蠕动泵专业厂家-19年专注蠕动泵| 寮步纸箱厂_东莞纸箱厂 _东莞纸箱加工厂-东莞市寮步恒辉纸制品厂 | 欧洲MV日韩MV国产_人妻无码一区二区三区免费_少妇被 到高潮喷出白浆av_精品少妇自慰到喷水AV网站 | 深圳APP开发_手机软件APP定制外包_小程序开发公司-来科信 | 重庆磨床过滤机,重庆纸带过滤机,机床伸缩钣金,重庆机床钣金护罩-重庆达鸿兴精密机械制造有限公司 | 钢结构-钢结构厂房-钢结构工程[江苏海逵钢构厂] | 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 昆明化妆培训-纹绣美甲-美容美牙培训-昆明博澜培训学校 | 贵州科比特-防雷公司厂家提供贵州防雷工程,防雷检测,防雷接地,防雷设备价格,防雷产品报价服务-贵州防雷检测公司 | 灌木树苗-绿化苗木-常绿乔木-价格/批发/基地 - 四川成都途美园林 | 开业庆典_舞龙舞狮_乔迁奠基仪式_开工仪式-神挚龙狮鼓乐文化传媒 |