From db6ed97a40ffe03c99f2053d6dc3f051ba31408b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E5=AE=8F=E6=9D=B0?= <1943105267@qq.com> Date: Thu, 4 Jul 2024 10:12:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8C=E6=9C=9F=E6=8E=A5=E5=8F=A3=E5=8A=A0?= =?UTF-8?q?=E4=B8=8A=E6=97=A0=E6=84=9Ftoken?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/mudu/records.js | 10 +++++++++- src/api/request2.js | 26 +++++++++++++++++++++++--- src/util/refresh2.js | 27 +++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 src/util/refresh2.js diff --git a/src/api/mudu/records.js b/src/api/mudu/records.js index 5091c14..19240b3 100644 --- a/src/api/mudu/records.js +++ b/src/api/mudu/records.js @@ -31,7 +31,7 @@ export function updateHistory(data) { return request({ url: '/mudu/history', method: 'put', - data + data, }) } @@ -42,3 +42,11 @@ export function delHistory(id) { method: 'delete', }) } + +export function loginMudu2(data) { + return request({ + url: '/loginnocaptcha', + method: 'post', + data, + }) +} diff --git a/src/api/request2.js b/src/api/request2.js index b4ecf8c..2acee14 100644 --- a/src/api/request2.js +++ b/src/api/request2.js @@ -9,10 +9,12 @@ // import Vue from 'vue'; import router from '../router' -import CryptoJS from 'crypto-js' + import axios from 'axios' import { Toast } from 'vant' +import { refreshToken, isRefreshRequest } from '@/util/refresh2.js' + // 实例化axios const request = axios.create({ baseURL: process.env.VUE_APP_RUOYI, @@ -23,7 +25,7 @@ const request = axios.create({ request.interceptors.request.use( (config) => { if (config.url !== 'secret/token') { - let token = localStorage.getItem('mudu_token') + let token = localStorage.getItem('mudu2_token') let authToken = 'Bearer ' + token config.headers['Authorization'] = authToken } @@ -51,7 +53,25 @@ request.interceptors.request.use( // response--响应 拦截器 request.interceptors.response.use( - (response) => { + async (response) => { + let errorData = response + + if (errorData.data.code === 401 && !isRefreshRequest(errorData.config)) { + const isSucceed = await refreshToken() + if (isSucceed) { + //重新请求 + // console.log('重新刷新') + errorData.config.headers.Authorization = + 'Bearer ' + localStorage.getItem('mudu2_token') //替换token + let result = await request.request(errorData.config) //重新请求 + return result + } else { + Toast({ + message: '刷新令牌失败', + position: 'bottom', + }) + } + } // 系统返回状态判断 if (response.data.code === 500) { Toast({ diff --git a/src/util/refresh2.js b/src/util/refresh2.js new file mode 100644 index 0000000..85028b5 --- /dev/null +++ b/src/util/refresh2.js @@ -0,0 +1,27 @@ +import { loginMudu2 } from '@/api/mudu/records.js' + +let promise + +export async function refreshToken() { + if (promise) { + return promise + } + promise = new Promise(async (resolve) => { + const loginFrom = { + username: 'admin', + password: 'Mudu@123.', + } + let res = await loginMudu2(loginFrom, { __isRefreshToken: true }) + localStorage.setItem('mudu2_token', res.token) //存token + resolve(res.code === 200) + }) + promise.finally(() => { + promise = null + }) + return promise +} + +export function isRefreshRequest(config) { + // console.log(config.__isRefreshToken) + return !!config.__isRefreshToken //两个取反,变成boolean +}