最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue中Axios添加攔截器刷新token的實現方法

 更新時間:2022年02月15日 10:37:13   作者:待風  
Axios是一款網絡前端請求框架,本文主要介紹了vue中Axios添加攔截器刷新token的實現方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

Axios是一款網絡前端請求框架,基本用法如下:

1. Axios基本用法:

        const response = await Axios.create({
            baseURL: "https://test.api.com",
            headers: {
                'Content-Type': 'application/json',
            },
          }).post<RequestResponse>('/signin', {
            user_id: "test_user",
            password: "xxx",
        });

其中,RequestResponse是返回的數據要解析為的數據類型,如下:

export interface RequestResponse {
    data: any;
    message: string;
    resultCode: number;
}

這樣,得到的response就是網絡請求的結果,可以進行判斷處理。

2. Axios基本封裝用法:

對Axios進行簡單的封裝,使得多個網絡請求可以使用統(tǒng)一的header等配置。

新建一個工具類,進行封裝:

import Axios, { AxiosRequestConfig, AxiosError, AxiosInstance, AxiosResponse } from 'axios';
?
export const BASE_URL = "https://test.api.com";
?
export const axiosApi = (): AxiosInstance => {
? const instance = Axios.create({
? ? baseURL: BASE_URL,
? ? headers: {
? ? ? ?'Content-Type': 'application/json',
? ? ? ?Authorization: `${getAccessToken()}`,
? ? },
? });
? ??
? return instance;
}
?
const getAccessToken = () => {
? ? // 這里獲取本地保存的token
? ? return xxxxx
}

然后使用的地方是這樣:

const response = await axiosApi().post<RequestResponse>('/signin', {
     user_id: "test_user",
     password: "xxx",
});

3. 添加攔截器的用法

現在我們想再增加個功能,就是調接口時,header里傳了token,但是有時候token過期了接口就會返回失敗,我們想在封裝的地方添加統(tǒng)一處理,如果token過期就刷新token,然后再調接口。

其中token的數據格式及解析方法已知如下:

import * as crypto from 'crypto';
import * as jwt from "jsonwebtoken";
?
export interface TokenData {
? userid: string;
? exp: number;
? iat: number;
}
?
export const decodeJWT = function (token: string): TokenData {
? if (!token) {
? ? return null;
? }
? const decoded = jwt.decode(token, { complete: true });
? return decoded?.payload;
};

如何統(tǒng)一刷新token呢?可以添加攔截器進行處理。把對Axios的封裝再改下,添加攔截器:

export const axiosApi = (): AxiosInstance => {
? const instance = Axios.create({
? ? baseURL: BASE_URL,
? ? headers: {
? ? ? ?'Content-Type': 'application/json',
? ? ? ?Authorization: `${getAccessToken()}`,
? ? },
? });
??
? // 添加攔截器
? instance.interceptors.request.use(
? ? config => {
? ? ? return refreshToken(config);
? ? },
? ? err => {
? ? ? return Promise.reject(err)
? ? }
? )
? return instance;
}
?
// 刷新token的方法
const refreshToken = async (config: AxiosRequestConfig) => {
? const oldToken = getAccessToken();
? if (!oldToken) { //如果本地沒有token,也就是沒登錄,那就不用刷新token
? ? return config;
? }
?
? const tokenData = decodeJWT(oldToken);//解析token,得到token里包含的過期時間信息
? const currentTimeSeconds = new Date().getTime()/1000;
?
? if (tokenData && tokenData.exp > currentTimeSeconds) {
? ? return config; // token數據里的時間比當前時間大,也就是沒到過期時間,那也不用刷新
? }
?
? // 下面是刷新token的邏輯,這里是調API獲取新的token
? const response = await signInRefreshToken(tokenData?.userid);
? if (response && response.status == 200) {
? ? const { token, refresh_token } = response.data?.data;
? ? // 保存刷新后的token
? ? storeAccessToken(token);
? ? // 給API的header設置新的token
? ? config.headers.Authorization = token;
? }
? return config;
}

經過這樣添加了攔截器,如果token沒過期,就直接進行網絡請求;如果token過期了,那就會調接口刷新token,然后給header設置新的token再進行網絡請求。

4. 注意事項:

要注意的一點是,實際應用時,要注意:

1.刷新token時如果調接口,所使用的網絡請求工具不能也使用這個封裝的工具,否則就會陷入無限循環(huán),可以使用簡單未封裝的方式請求。

2.本例使用的方法,是進行請求前刷新token。也可以使用先調網絡請求,如果接口返回錯誤碼表示token過期,則刷新token,再重新請求的方式。

到此這篇關于vue中Axios添加攔截器刷新token的實現方法的文章就介紹到這了,更多相關Axios添加攔截器刷新token內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue+canvas實現拼圖小游戲

    vue+canvas實現拼圖小游戲

    這篇文章主要為大家詳細介紹了vue+canvas實現拼圖小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • vue基礎知識--axios合并請求和slot

    vue基礎知識--axios合并請求和slot

    這篇文章主要介紹了vue中的axios和slot,文中代碼非常詳細,對大家的工作學習有所幫助,感興趣的朋友可以參考下
    2020-06-06
  • vue-quill-editor的使用及個性化定制操作

    vue-quill-editor的使用及個性化定制操作

    這篇文章主要介紹了vue-quill-editor的使用及個性化定制操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue?@click?@tap重疊事件區(qū)分方式

    vue?@click?@tap重疊事件區(qū)分方式

    這篇文章主要介紹了vue?@click?@tap重疊事件區(qū)分方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • nuxt 服務器渲染動態(tài)設置 title和seo關鍵字的操作

    nuxt 服務器渲染動態(tài)設置 title和seo關鍵字的操作

    這篇文章主要介紹了nuxt 服務器渲染動態(tài)設置 title和seo關鍵字的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Vue頁面跳轉動畫效果的實現方法

    Vue頁面跳轉動畫效果的實現方法

    百度了好久都沒辦法實現vue中一個頁面跳到另一個頁面,甚至到google上搜索也是沒辦法的,最終還是找了高人親自指導,所以下面這篇文章主要給大家介紹了關于Vue頁面跳轉動畫效果的實現方法,需要的朋友可以參考下
    2018-09-09
  • 簡單理解vue中實例屬性vm.$els

    簡單理解vue中實例屬性vm.$els

    這篇文章主要幫助大家簡單理解vue中實例屬性vm.$els,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • IDEA創(chuàng)建Vue項目的兩種方式總結

    IDEA創(chuàng)建Vue項目的兩種方式總結

    這篇文章主要介紹了IDEA創(chuàng)建Vue項目的兩種方式總結,具有很好的參考價值,希望對大家有所幫助。
    2023-04-04
  • Vue利用canvas實現移動端手寫板的方法

    Vue利用canvas實現移動端手寫板的方法

    本篇文章主要介紹了Vue利用canvas實現移動端手寫板的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • 前端Vue3項目打包成Docker鏡像運行的詳細步驟

    前端Vue3項目打包成Docker鏡像運行的詳細步驟

    將Vue3項目打包、編寫Dockerfile、構建Docker鏡像和運行容器是部署Vue3項目到Docker的主要步驟,這篇文章主要介紹了前端Vue3項目打包成Docker鏡像運行的詳細步驟,需要的朋友可以參考下
    2024-09-09

最新評論

双桥区| 石河子市| 上犹县| 仁化县| 临邑县| 鄂温| 井陉县| 东明县| 河间市| 瑞安市| 兴国县| 海宁市| 西乌珠穆沁旗| 珠海市| 武功县| 明溪县| 汨罗市| 新化县| 靖边县| 牙克石市| 吉林省| 滨州市| 临安市| 城市| 东辽县| 嘉义县| 台东县| 攀枝花市| 崇义县| 孝义市| 丁青县| 密云县| 南部县| 思南县| 宁化县| 吴旗县| 华坪县| 铅山县| 秦安县| 儋州市| 绩溪县|