vue攔截器實現統一token,并兼容IE9驗證

  項目中使用vue搭建前端頁面,并通過axios請求后臺api接口,完成數據交互。如果驗證口令token寫在在每次的接口中,也是個不小的體力活,而且也不靈活。這里分享使用vue自帶攔截器,給每次請求的頭部添加token,而且兼容了IE9。

import axios from 'axios';// 這里的config包含每次請求的內容,在這里把token放到請求頭
axios.interceptors.request.use(function (config) {  let token = window.localStorage.getItem("tokenid");  //從緩存中取tokenif (token) {config.headers.Authorization = token;    //將token放到請求頭發送給服務器//這里主要是為了兼容IE9var browser = navigator.appName;var b_version = navigator.appVersion;if (browser == 'Netscape' && b_version.indexOf(';') < 0) {  //火狐
} else {if (b_version.indexOf(';') < 0) {return config;}var version = b_version.split(";");var trim_Version = version[1].replace(/[ ]/g, "");if (browser == "Microsoft Internet Explorer" && trim_Version == "MSIE9.0") {  //IE9if (config.url.indexOf('?') > 0) {config.url = config.url + "&token=" + JSON.parse(token).value;}else {config.url = config.url + "?token=" + JSON.parse(token).value;}}}} else {localStorage.clear();  //清空緩存if (router.currentRoute.name && router.currentRoute.name.toLowerCase() == "login") {  //這里需要排除登陸(或者說是第一次請求獲取token)的時候的請求驗證,我這里沒做處理
      //我的后臺api接口,并沒有對login接口做token驗證,所以這里不做處理
} else {     //除登陸接口外,其他需要token驗證的方法,會走這里且返回nullreturn null;}}return config; }, function (err) {// return Promise.reject(err); });// http response 攔截器 axios.interceptors.response.use(response => {return response; //請求成功的時候返回的data },error => {try {if (error.response) {switch (error.response.status) {case 401://token過期,清除token并跳轉到登錄頁面 localStorage.clear();var baurl = window.location.href;router.replace({path: 'login',query: { backUrl: baurl }}); return;}}return Promise.reject(error.response.data)}catch (e) {}});

  寫在后面。因為我的token放在了緩存中,所以在每次請求前,我會先在前端取出token,并驗證其時效性,如果過期或不存在會先跳轉到登陸頁,而不會走攔截器去請求請求。具體也參考mounted()方法。

轉載于:https://www.cnblogs.com/fuguoliang/p/8952107.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250402.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250402.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250402.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android Studio --- [學習筆記]Button、TextView、EditText

說明 源代碼為了更全面的了解RN,先熟悉一下Android開發 第1章 Android 初體驗 1.1 Android開發概述 Android是Google開發的操作系統Android開發是移動應用開發的表現形式之一(Android、IOS、H5 App、Native H5、 RN、ionic、MUI…) 1.2 Android開發工具 Android Studio為…

BZOJ2154: Crash的數字表格 BZOJ2693: jzptab

【傳送門&#xff1a;BZOJ2154&BZOJ2693】 簡要題意&#xff1a; 給出n,m&#xff0c;求$\sum_{i1}^{n}\sum_{j1}^{m}LCM(i,j)$ 題解&#xff1a; 莫比烏斯反演&#xff08;因為BZOJ2693是多組數據&#xff0c;數據強一點&#xff0c;所以代碼用BZOJ2693的&#xff09; 設n…

對于數據庫表排他更新的理解

1. 首先任何應用程序都只能有一個服務端&#xff0c;服務端共享數據給多個客戶端訪問。 (ア) 客戶端從服務端取得相應的數據。 (イ) 或者更新、刪除服務端的內容。 2. 當客戶端A進入服務端方法更新數據庫&#xff0c;服務端方法將被鎖定。其它客戶端在訪問該方法時&#xff0c…

Angular 路由守衛

1. 路由 Angular路由: 可以控制頁面跳轉&#xff1b;可以在多視圖間切換&#xff1b; 2. 路由守衛 Angular路由守衛&#xff1a; 在進入或離開某路由時&#xff0c;用于判斷是否可以離開、進入某路由&#xff1b;&#xff1b;&#xff1b; return true 代表可以進入當前路由&am…

Vue頁面手動刷新,導航欄激活項還原到初始狀態問題解決方案

場景描述&#xff1a;在頁面中存在頂部導航和左側導航&#xff0c;左側導航和右側內容區使用了命名視圖實現&#xff0c;點擊左側導航的鏈接時&#xff0c;右側內容區相應顯示不同組件內容。問題&#xff1a;在當前鏈接手動刷新瀏覽器&#xff08;例如&#xff1a;瀏覽器地址為…

Android Studio --- [學習筆記]RadioButton、CheckBox、ImageView、ListView、TCP的三次握手

說明 源代碼在2.x里有TCP的三次揮手與四次握手,先對它進行簡單的回答(百度).預計在下一篇里,會繼續說明TCP接上一篇: Android Studio — > [學習筆記]Button、TextView、EditText 2.5 RadioButton 常用屬性自定義樣式監聽事件 2.5.1 新建按鈕,并跳轉到相應的活動頁面 1.…

洛谷3171 網絡吞吐量(網絡流)

t開成n結果cur賦值的時候也只賦值到t令人智熄 【題目分析】 好吧我承認這個錯誤真的呵呵。。。。。。。。 題目有那~~~~~么長&#xff0c;然后畫畫圖這道題就基本看出正解了&#xff0c;再一看數據范圍&#xff0c;n<500簡直良心&#xff0c;好了&#xff0c;網絡流沒得跑了…

DIV+CSS布局的優勢和弊端

DIVCSS的優勢1、符合W3C標準。這保證您的網站不會因為將來網絡應用的升級而被淘汰。2、對瀏覽者和瀏覽器更具親和力。由于CSS富含豐富的樣式&#xff0c;使頁面更加靈活性&#xff0c;它可以根據不同的瀏覽器&#xff0c;而達到顯示效果的統一和不變形。這樣就支持瀏覽器的向后…

Android Studio --- [學習筆記]TCP(第2彈)、GridView、ScrollView

說明 這篇主要接上一篇Android Studio — > [學習筆記]RadioButton、CheckBox、ImageView、ListView、TCP的三次握手對上面回答的細解,并用JS偽代碼,對TCP三次握手和四次揮手的簡單實現.Android的基本了解到此篇結束,后續會根據具體情況深度學習. 2.y TCP的三次握手和四次揮…

MySQL中varchar最大長度是多少

一. varchar存儲規則&#xff1a; 4.0版本以下&#xff0c;varchar(20)&#xff0c;指的是20字節&#xff0c;如果存放UTF8漢字時&#xff0c;只能存6個&#xff08;每個漢字3字節&#xff09; 5.0版本以上&#xff0c;varchar(20)&#xff0c;指的是20字符&#xff0c;無論存放…

bzoj 1232: [Usaco2008Nov]安慰奶牛cheer【最小生成樹】

有趣 每條邊在算答案的時候被算了二倍的邊權值加上兩個端點的權值&#xff0c;然后睡覺點額外加一次 所以可以用這個權做MST&#xff0c;然后加上點權最小的點 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N1…

JavaScript --- [學習筆記]觀察者模式 理解對象 工廠模式 構造函數模式

說明 本系列(JS基礎梳理)為后面TCP的模擬實現做準備本篇的主要內容: 觀察者模式、工廠模式、構造函數模式 和 對對象的理解 1. 觀察者模式 參考JavaScript設計模式 1.1 消息注冊方法 “將訂閱者注冊的消息推入到消息隊列中” [算法思路] : 在推入到消息隊列時,如果此消息…

java_day19_MVC和配置文件

簡單的MVC設計 MVC的全名是Model View Controller&#xff0c;是模型(model)&#xff0d;視圖(view)&#xff0d;控制器(controller)的縮寫&#xff0c;是一種軟件設計典范。它是用一種業務邏輯、數據與界面顯示分離的方法來組織代碼&#xff0c;將眾多的業務邏輯聚集到一個部件…

Problem I: 打印金字塔

#include<stdio.h> int main() {int n,i,j,k;scanf("%d",&n);for(i1;i<n;i){for(j1;j<n-i;j)printf(" ");for(k1;k<2*i-1;k)printf("*");printf("\n");}return 0; } HINT 用雙重循環做&#xff0c;外循環代表行數&…

webpack --- 發布環境的配置 代碼壓縮 代碼分類

說明 源代碼本篇主要對發布環境的配置說明前面2點是對webpack的一個復習.第3點開始,逐步配置部署代碼 1. Webpack發布的策略 2.1 在實際開發中,一般會有兩套方案: 開發期間的項目:包含了測試文件、測試數據、開發工具、測試工具等相關配置,有利于項目的開發和測試,但是這些文…

salesforce lightning零基礎學習(三) 表達式的!(綁定表達式)與 #(非綁定表達式)

在salesforce的classic中&#xff0c;我們使用{!expresion}在前臺頁面展示信息&#xff0c;在lightning中&#xff0c;上一篇我們也提及了&#xff0c;如果展示attribute的值&#xff0c;可以使用{!v.expresion}展示信息。 lightning在component中解析動態值的時候&#xff0c;…

sqlserver學習3---sql函數

一、SQL DML 和 DDL 可以把 SQL 分為兩個部分&#xff1a;數據操作語言 (DML) 和 數據定義語言 (DDL)。 SQL (結構化查詢語言)是用于執行查詢的語法。但是 SQL 語言也包含用于更新、插入和刪除記錄的語法。 查詢和更新指令構成了 SQL 的 DML 部分&#xff1a; SELECT - 從數據庫…

JavaScript --- [學習筆記] 原型模式

說明 接JavaScript — > [學習筆記]觀察者模式 & 理解對象 & 工廠模式 & 構造函數模式上一篇構造函數模式創建的實例,不同實例的同一個方法是不相等的,為了解決這個問題.出現了原型模式 1. 原型模式 具體做法是,不在構造函數中定義對象實例的信息,而是將這些…

網絡協議各層概述

網絡協議概述 OSI是一個開放性的通信系統互連參考模型&#xff0c;他是一個定義得非常好的協議規范。OSI模型有7層結構&#xff0c;每層都可以有幾個子層。 OSI的7層從上到下分別是 7 應用層 6 表示層 5 會話層 4 傳輸層 3 網絡層 2 數據鏈路層 1 物理層&#xff1b; 其中高層&…

A start job is running for Raise network interface(5min 13s )問題解決方法

命令&#xff1a;sudo vim /etc/systemd/system/network-online.target.wants/networking.service將里面的TimeoutStartSec5min 修改為TimeoutStartSec2sec 然后重啟系統&#xff0c;就可以生效了&#xff0c;開機速度很快 轉載于:https://www.cnblogs.com/sea-stream/p/98615…