Axios Token 設置示例

以下是一個完整的 Axios Token 設置示例,涵蓋全局配置、請求攔截器和單次請求設置三種方式:

1. 基礎配置(推薦方案)

javascript復制代碼

import axios from 'axios';// 創建 Axios 實例
const apiClient = axios.create({baseURL: 'https://api.yourdomain.com',timeout: 10000,
});// 請求攔截器(自動添加 Token)
apiClient.interceptors.request.use(config => {// 從安全存儲獲取 token(如 localStorage、Vuex/Pinia、Redux 等)const token = localStorage.getItem('authToken') || sessionStorage.getItem('authToken');if (token) {config.headers.Authorization = `Bearer ${token}`;} else {console.warn('No authentication token found');}return config;
}, error => {return Promise.reject(error);
});export default apiClient;

2. 使用示例

javascript復制代碼

// 使用配置好的實例發起請求
apiClient.get('/user/profile').then(response => {console.log('用戶數據:', response.data);}).catch(error => {console.error('請求失敗:', error.response?.data || error.message);});

3. 單次請求設置 Token

javascript復制代碼

// 方法 1:通過 headers 參數
axios.get('/protected/data', {headers: {Authorization: `Bearer ${localStorage.getItem('authToken')}`}
});// 方法 2:使用自定義實例
const tempClient = axios.create();
tempClient.get('/protected/data', {headers: {Authorization: `Bearer ${localStorage.getItem('authToken')}`}
});

4. 完整 Vue.js 應用示例

javascript復制代碼

// main.js
import { createApp } from 'vue';
import axios from 'axios';
import App from './App.vue';const app = createApp(App);// 全局配置 Axios
const apiClient = axios.create({baseURL: import.meta.env.VITE_API_URL,
});apiClient.interceptors.request.use(config => {const token = localStorage.getItem('authToken');token && (config.headers.Authorization = `Bearer ${token}`);return config;
});// 掛載到全局屬性
app.config.globalProperties.$axios = apiClient;app.mount('#app');

javascript復制代碼

// AuthService.js
export default {async login(credentials) {const response = await axios.post('/auth/login', credentials);// 保存 token 到 localStoragelocalStorage.setItem('authToken', response.data.token);return response.data.user;},logout() {localStorage.removeItem('authToken');},async getUserData() {// 使用全局配置的 axios 實例return this.$axios.get('/user');}
}

5. 處理 Token 過期的響應攔截器

javascript復制代碼

// 添加響應攔截器
apiClient.interceptors.response.use(response => response,error => {const originalRequest = error.config;// 檢測 401 錯誤且未重試過if (error.response.status === 401 && !originalRequest._retry) {originalRequest._retry = true;// 使用刷新 token 獲取新 access tokenreturn axios.post('/auth/refresh-token', {refreshToken: localStorage.getItem('refreshToken')}).then(res => {// 保存新 tokenlocalStorage.setItem('authToken', res.data.accessToken);// 更新請求頭originalRequest.headers.Authorization = `Bearer ${res.data.accessToken}`;// 重新發起原始請求return axios(originalRequest);}).catch(refreshError => {// 刷新失敗則登出store.dispatch('logout');return Promise.reject(refreshError);});}return Promise.reject(error);}
);

6. 安全實踐建議

  1. 存儲位置

    javascript復制代碼

    // 避免 XSS 攻擊的最佳實踐
    const secureStorage = {set: (key, value) => {if (window.isSecureContext) {// 優先使用 HttpOnly cookies(服務端設置)} else {// 次選方案:sessionStorage(標簽頁生命周期)sessionStorage.setItem(key, value);}},get: (key) => sessionStorage.getItem(key)
    }
    
  2. Token 自動續期

    javascript復制代碼

    // 定時檢查 token 有效期
    setInterval(() => {const token = localStorage.getItem('authToken');if (token && isTokenExpiringSoon(token)) {refreshTokenSilently();}
    }, 300000); // 每 5 分鐘檢查一次
    
  3. 敏感操作保護

    javascript復制代碼

    // 關鍵操作前驗證密碼
    async function changePassword(newPassword) {const password = prompt('請確認您的密碼');await apiClient.post('/verify-password', { password });return apiClient.put('/user/password', { newPassword });
    }
    

7. 完整流程圖

mermaid復制代碼導出svg

8. 常見錯誤處理

javascript復制代碼

// 統一錯誤處理
apiClient.interceptors.response.use(response => response,error => {if (error.response) {switch (error.response.status) {case 401:console.error('認證失敗,請重新登錄');router.push('/login');break;case 403:console.error('權限不足,無法訪問');break;case 429:console.warn('請求過于頻繁,請稍后重試');break;default:console.error(`請求錯誤: ${error.message}`);}} else if (error.request) {console.error('服務器無響應', error.request);} else {console.error('請求配置錯誤', error.message);}return Promise.reject(error);}
);

以上實現滿足企業級應用的安全要求,可根據實際框架(React/Vue/Angular)進行調整。關鍵要點:

  1. 使用 Axios 實例封裝避免全局污染
  2. 攔截器自動處理 Token 注入
  3. 實現 Token 刷新機制
  4. 提供多種存儲方案的安全實踐
  5. 完整的錯誤處理流程

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

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

相關文章

Excel數據合并工具:零門檻快速整理

軟件介紹 在數據處理工作中,合并Excel同類數據是一項常見但繁瑣的任務。今天為大家推薦一款專為簡化此類操作設計的工具,它能快速完成工作表內多行同類數據的合并整理,大幅提升數據處理效率。 零門檻操作體驗 相比Excel自帶的數據透視…

深度學習 -- 梯度計算及上下文控制

深度學習 – 梯度計算及上下文控制 文章目錄深度學習 -- 梯度計算及上下文控制一,自動微分1.1 基礎概念1.2 計算梯度1.2.1 計算標量梯度1.2.2 計算向量梯度1.2.3 多標量梯度計算1.2.4 多向量梯度計算二,梯度上下文控制2.1 控制梯度計算2.2 累計梯度2.3 梯…

Redisson RLocalCachedMap 核心參數詳解

🧑 博主簡介:CSDN博客專家,歷代文學網(PC端可以訪問:https://literature.sinhy.com/#/?__c1000,移動端可微信小程序搜索“歷代文學”)總架構師,15年工作經驗,精通Java編…

【Unity3D實例-功能-移動】角色移動-通過WSAD(Rigidbody方式)

你是否曾夢想在虛擬世界中自由翱翔,像海豚一樣在海洋自由穿梭,或者像宇航員一樣在宇宙中盡情探索?今天,我們就來聊聊如何在Unity中使用Rigidbody來實現角色移動。 廢話不多說,走,讓我們馬上來一探究竟&…

Vue接口平臺學習十一——業務流測試

效果圖及簡單說明 與之前的用例列表相似布局,也分左右,左邊用于顯示測試流程的名稱,右邊用于顯示流程相關信息。 左側點擊添加,直接增加一個新的業務流。 右側是點擊的業務流詳情,展示名稱,名稱的編輯保存&…

碳化硅缺陷分類與原因

01一、碳化硅晶體材料中的缺陷到底是什么?碳化硅晶體材料中的缺陷是指在晶體生長、加工或使用過程中出現的不完美結構。這些缺陷可能表現為晶體內部的裂紋、表面的凹坑、原子排列的錯誤等。雖然缺陷看起來微不足道,但它們卻可能對晶體的電學、熱學和機械…

Jenkins 實現項目的構建和發布

作者:小凱 沉淀、分享、成長,讓自己和他人都能有所收獲! 本文的宗旨在于通過簡單干凈實踐的方式教會讀者,如何在 Docker 中部署 Jenkins,并通過 Jenkins 完成對項目的打包構建并在 Docker 容器中部署。 Jenkins 的主要…

Django接口自動化平臺實現(三)

3.2 后臺 admin 添加數據 1)注冊模型類到 admin: 1 from django.contrib import admin2 from . import models3 4 5 class ProjectAdmin(admin.ModelAdmin):6 list_display ("id", "name", "proj_owner", "tes…

CentOS 7 配置環境變量常見的4種方式

?博客主頁: https://blog.csdn.net/m0_63815035?typeblog 💗《博客內容》:.NET、Java.測試開發、Python、Android、Go、Node、Android前端小程序等相關領域知識 📢博客專欄: https://blog.csdn.net/m0_63815035/cat…

k8s:手動創建PV,解決postgis數據庫本地永久存儲

1.離線環境CPU:Hygon C86 7285 32-core Processor 操作系統:麒麟操作系統 containerd:1.7.27 Kubernetes:1.26.12 KubeSphere:4.1.2 kubekey:3.1.10 Harbor:2.13.1 Postgis:17-3.52創建StorageClass2.1創建 apiVersion: storage.k8s.io/v1kin…

谷歌瀏覽器Chrome的多用戶配置文件功能

谷歌瀏覽器Chrome的多用戶配置文件功能允許在同一設備上創建多個獨立賬戶,每個賬戶擁有完全隔離的瀏覽數據(如書簽、歷史記錄、擴展、Cookies等),非常適合工作/生活賬戶分離、家庭共享或臨時多賬號登錄場景。 如何使用Chrome的多用戶配置文件功能? 一、創建與切換用戶 1.…

傲軟錄屏 專業高清錄屏軟件 ApowerREC Pro 下載與保姆級安裝教程!!

小編今天分享一款強大的電腦屏幕錄像軟件 傲軟錄屏 ApowerREC,能夠幫助用戶錄制中電腦桌面屏幕上的所有內容,包括畫面和聲音,支持全屏錄制、區域錄制、畫中畫以及攝像頭錄制等多種視頻錄制模式,此外,還支持計劃任務錄制…

【計算機網絡】MAC地址與IP地址:網絡通信的雙重身份標識

在計算機網絡領域,MAC地址與IP地址是兩個核心概念,它們共同構成了數據傳輸的基礎。理解二者的區別與聯系,對于網絡配置、故障排查及安全管理至關重要。 一、基本概念 1. MAC地址(物理地址) 定義:固化在網絡…

如何用keepAlive實現標簽頁緩存

什么是KeepAlive首先,要明確所說的是TCP的 KeepAlive 還是HTTP的 Keep-Alive。TCP的KeepAlive和HTTP的Keep-Alive是完全不同的概念,不能混為一談。實際上HTTP的KeepAlive寫法是Keep-Alive,跟TCP的KeepAlive寫法上也有不同。TCP的KeepAliveTCP…

數據庫隔離級別

隔離級別決定了事務之間的可見性規則,直接影響數據庫的并發性能和數據一致性。SQL 標準定義了 4 種隔離級別,從低到高依次為:讀未提交→讀已提交→可重復讀→串行化。隔離級別越高,對并發問題的解決能力越強,但對性能的…

基于Python flask的電影數據分析及可視化系統的設計與實現,可視化內容很豐富

摘要:基于Python的電影數據分析及可視化系統是一個應用于電影市場的數據分析平臺,旨在為廣大電影愛好者提供更準確、更詳細、更實用的電影數據。數據分析部分主要是對來自貓眼電影網站上的數據進行清洗、分類處理、存儲等步驟,數據可視化則是…

TCP通訊開發注意事項及常見問題解析

文章目錄一、TCP協議特性與開發挑戰二、粘包與拆包問題深度解析1. 成因原理2. 典型場景與實例驗證3. 系統化解決方案接收方每次讀取10字節2. 丟包檢測與驗證工具3. 工程化解決方案四、連接管理關鍵實踐1. 超時機制設計2. TIME_WAIT狀態優化3. 異常處理最佳實踐五、高性能TCP開發…

2021 RoboCom 世界機器人開發者大賽-本科組(復賽)解題報告 | 珂學家

前言 題解 睿抗機器人開發者大賽CAIP-編程技能賽-歷年真題 匯總 2021 RoboCom 世界機器人開發者大賽-本科組(復賽)解題報告 感覺這個T1特別有意思,非典型題,著重推演下結論。 T2是一道玄學題,但是涉及一些優化技巧…

《計算機“十萬個為什么”》之 MQ

《計算機“十萬個為什么”》之 MQ 📨 歡迎來到消息隊列的奇妙世界! 在這篇文章中,我們將探索 MQ 的奧秘,從基礎概念到實際應用,讓你徹底搞懂這個分布式系統中不可或缺的重要組件!🚀 作者&#x…

Django母嬰商城項目實踐(七)- 首頁數據業務視圖

7、首頁數據業務視圖 1、介紹 視圖(View)是Django的MTV架構模式的V部分,主要負責處理用戶請求和生成相應的響應內容,然后在頁面或其他類型文檔中顯示。 也可以理解為視圖是MVC架構里面的C部分(控制器),主要處理功能和業務上的邏輯。我們習慣使用視圖函數處理HTTP請求,…