欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue項目中實現(xiàn)無感Token刷新的示例

 更新時間:2024年11月08日 09:42:40   作者:VueVirtuoso  
在前端項目中,Token用于用戶認證和權(quán)限管理,文章介紹了在Vue項目中實現(xiàn)Token的無感刷新,包括Token刷新的原理、攔截器的應(yīng)用和處理Token過期的方法,感興趣的可以了解一下

在前端項目中,Token 通常用于用戶認證和權(quán)限管理。無論是基于 JWT (JSON Web Token) 還是其他類型的 Token,它們往往有一個過期時間。當 Token 過期時,用戶的操作會受到影響,因此我們需要一種無感知(或“靜默”)的方式來刷新 Token,確保用戶在會話中的操作不會中斷。

本文將介紹如何在 Vue 項目中實現(xiàn) Token 的無感刷新,包括 Token 刷新的原理、攔截器的應(yīng)用以及如何處理 Token 過期。

一、Token 刷新的背景

通常,Token 分為兩種:

  • 訪問令牌 (Access Token):用于每次請求時驗證用戶身份,通常有效期較短。
  • 刷新令牌 (Refresh Token):用于刷新訪問令牌,當訪問令牌過期時,可以使用刷新令牌獲取新的訪問令牌。

在實際應(yīng)用中,訪問令牌的有效期較短,主要是為了安全性。當訪問令牌過期時,我們不想強制用戶重新登錄,而是通過刷新令牌來獲取新的訪問令牌,從而實現(xiàn)無感刷新。

二、無感 Token 刷新的實現(xiàn)原理

無感刷新是指在用戶不感知的情況下,當 Token 過期時自動刷新并重新發(fā)起請求。這個過程通常包含以下步驟:

  • 每次發(fā)起請求時,檢查訪問令牌的有效性。
  • 如果訪問令牌過期,暫停當前請求并使用刷新令牌獲取新的訪問令牌。
  • 使用新的訪問令牌重新發(fā)起之前被暫停的請求。
  • 更新應(yīng)用中的 Token 信息。

三、在 Vue 項目中實現(xiàn) Token 無感刷新

在 Vue 項目中,我們通常使用 Axios 來處理 HTTP 請求。為了實現(xiàn)無感刷新,我們可以使用 Axios 的攔截器來攔截請求和響應(yīng),檢測 Token 是否過期,并在需要時自動刷新。

1. 配置 Axios 攔截器

首先,我們需要設(shè)置 Axios 的請求和響應(yīng)攔截器:

import axios from 'axios'; import store from '@/store'; // 假設(shè)我們將 token 保存在 Vuex 中 import router from '@/router'; 
const apiClient = axios.create({
 baseURL: process.env.VUE_APP_API_BASE_URL,
 timeout: 10000 
});
 // 請求攔截器,攜帶 token 
apiClient.interceptors.request.use( config => 
{ const accessToken = store.getters['auth/accessToken']; 
if (accessToken) 
{ config.headers['Authorization'] = `Bearer ${accessToken}`; }
 return config; 
}, error => { 
return Promise.reject(error); }
 ); 
// 響應(yīng)攔截器,檢查 token 是否過期
 apiClient.interceptors.response.use( response => { return response; },
 async error => { const originalRequest = error.config; 
const refreshToken = store.getters['auth/refreshToken']; 
// 檢查是否是認證錯誤(如 401) 
if (error.response.status === 401 && !originalRequest._retry && refreshToken) { originalRequest._retry = true; 
// 嘗試使用刷新令牌獲取新的訪問令牌 
try { const response = await axios.post('/auth/refresh', { token: refreshToken });
 const newAccessToken = response.data.accessToken; 
// 更新存儲中的 token store.commit('auth/SET_ACCESS_TOKEN', newAccessToken); 
// 重新發(fā)起之前失敗的請求 
originalRequest.headers['Authorization'] = `Bearer ${newAccessToken}`; 
return apiClient(originalRequest); } 
catch (refreshError) { 
// 刷新失敗,跳轉(zhuǎn)到登錄頁面 
store.commit('auth/LOGOUT');
 router.push('/login'); } } 
return Promise.reject(error); } ); 
export default apiClient;

2. 關(guān)鍵點解析

  • 請求攔截器:在每次請求發(fā)送前,檢查 accessToken 是否存在,并將其添加到請求頭的 Authorization 字段中,確保后端可以識別用戶身份。

  • 響應(yīng)攔截器:如果響應(yīng)狀態(tài)碼為 401,說明訪問令牌無效或過期。此時,會嘗試使用 refreshToken 請求新的 accessToken。成功后,更新 store 中的 accessToken 并重新發(fā)起之前失敗的請求。

3. Vuex 管理 Token

為了更好地管理 Token,我們可以使用 Vuex 來存儲和更新 Token 信息。

// store/modules/auth.js
 const state = { accessToken: localStorage.getItem('accessToken') || '', refreshToken: localStorage.getItem('refreshToken') || '' }; 
const getters = { accessToken: state => state.accessToken, 
refreshToken: state => state.refreshToken }; 
const mutations = { 
SET_ACCESS_TOKEN(state, token) { state.accessToken = token; 
localStorage.setItem('accessToken', token); }, 
SET_REFRESH_TOKEN(state, token) { state.refreshToken = token;
 localStorage.setItem('refreshToken', token); }, 
LOGOUT(state) { state.accessToken = ''; 
state.refreshToken = ''; 
localStorage.removeItem('accessToken'); 
localStorage.removeItem('refreshToken'); } };
 export default { state, getters, mutations };

在 Vuex 中,我們使用 localStorage 來持久化 accessToken 和 refreshToken,這樣即使用戶刷新頁面,Token 也不會丟失。

四、自動刷新和用戶體驗

Token 無感刷新極大地提升了用戶體驗,因為用戶在 Token 過期時無需重新登錄。但需要注意以下幾點:

  • 安全性:刷新令牌的有效期應(yīng)比訪問令牌長,且只能使用一次,防止濫用。
  • 定時刷新:可以在前端設(shè)置一個定時器,在 Token 過期前自動刷新,而不是等到請求 401 錯誤時才刷新。
  • 用戶操作:在刷新令牌也過期時,需要引導用戶重新登錄。

五、總結(jié)

在 Vue 項目中實現(xiàn)無感 Token 刷新,可以確保用戶在 Token 過期時不會被強制登出或中斷操作。通過 Axios 攔截器和 Vuex 的結(jié)合,我們可以實現(xiàn)自動化的 Token 管理和刷新流程。這不僅提升了安全性,也為用戶提供了更加流暢的使用體驗。

到此這篇關(guān)于Vue項目中實現(xiàn)無感Token刷新的示例的文章就介紹到這了,更多相關(guān)Vue 無感Token刷新內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Vue sessionStorage實現(xiàn)保留搜索框搜索內(nèi)容

    基于Vue sessionStorage實現(xiàn)保留搜索框搜索內(nèi)容

    這篇文章主要介紹了基于Vue sessionStorage實現(xiàn)保留搜索框搜索內(nèi)容,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • vue3+el-table封裝示例詳解(編輯、刪除、查看詳情按鈕一起封裝)

    vue3+el-table封裝示例詳解(編輯、刪除、查看詳情按鈕一起封裝)

    在Vue3中,利用Element?Plus?UI庫封裝表格組件,實現(xiàn)編輯、刪除和查看詳情的功能,通過定義tableData和tableDataHeader來管理表格數(shù)據(jù)和表頭,其中tableData通常從后端獲取,而tableHeader可根據(jù)具體需求自定義,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • vue路由 遍歷生成復數(shù)router-link的例子

    vue路由 遍歷生成復數(shù)router-link的例子

    今天小編就為大家分享一篇vue路由 遍歷生成復數(shù)router-link的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • vue組件中的數(shù)據(jù)傳遞方法

    vue組件中的數(shù)據(jù)傳遞方法

    這篇文章主要介紹了vue組件中的數(shù)據(jù)傳遞方法,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-05-05
  • vue管理系統(tǒng)項目中的一些核心技能匯總

    vue管理系統(tǒng)項目中的一些核心技能匯總

    Vue是當今增長最快的前端框架,Vue 平易近人、用途廣泛且性能卓越,它的語法非常直觀,并且具有友好的學習曲線,是開發(fā)人員最想學習的頂級前端庫之一,下面這篇文章主要給大家介紹了關(guān)于vue管理系統(tǒng)項目中的一些核心技能,需要的朋友可以參考下
    2022-05-05
  • 淺談vue后臺管理系統(tǒng)權(quán)限控制思考與實踐

    淺談vue后臺管理系統(tǒng)權(quán)限控制思考與實踐

    這篇文章主要介紹了淺談vue后臺管理系統(tǒng)權(quán)限控制思考與實踐,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • Vue+element 解決瀏覽器自動填充記住的賬號密碼問題

    Vue+element 解決瀏覽器自動填充記住的賬號密碼問題

    我們在做form表單的時候,會發(fā)現(xiàn),瀏覽器會自動的將我們之前保存的密碼,自動的填充到表單中input 為 type="password" 的框中,如何實現(xiàn)此功能呢,下面小編給大家介紹下,感興趣的朋友一起看看吧
    2019-06-06
  • 使用Vue和ECharts創(chuàng)建交互式圖表的代碼示例

    使用Vue和ECharts創(chuàng)建交互式圖表的代碼示例

    在現(xiàn)代 Web 應(yīng)用中,數(shù)據(jù)可視化是一個重要的組成部分,它不僅能夠幫助用戶更好地理解復雜的數(shù)據(jù),還能提升用戶體驗,本文給大家使用Vue和ECharts創(chuàng)建交互式圖表的示例,需要的朋友可以參考下
    2024-11-11
  • 詳解vuejs2.0 select 動態(tài)綁定下拉框支持多選

    詳解vuejs2.0 select 動態(tài)綁定下拉框支持多選

    這篇文章主要介紹了vuejs2.0 select動態(tài)綁定下拉框 ,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • vite/Vuecli配置proxy代理解決跨域問題

    vite/Vuecli配置proxy代理解決跨域問題

    這篇文章主要介紹了vite/Vuecli配置proxy代理解決跨域問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評論