From 6d60ace02d2a80c5ecc200e847963780cbc861cc Mon Sep 17 00:00:00 2001 From: wkl505997900 <2313665567@qq.com> Date: Fri, 9 Jun 2023 17:50:01 +0800 Subject: [PATCH] fix tokenissue --- src/vendor/ant-design-pro/utils/request.js | 64 +++++++++++++++++----- src/vendor/ant-design-pro/utils/util.js | 16 ++++++ src/views/leaks/LeakTaskList.vue | 3 +- src/views/leaks/components/HostTable.vue | 3 +- 4 files changed, 69 insertions(+), 17 deletions(-) diff --git a/src/vendor/ant-design-pro/utils/request.js b/src/vendor/ant-design-pro/utils/request.js index 53d4f3b..bccd36c 100644 --- a/src/vendor/ant-design-pro/utils/request.js +++ b/src/vendor/ant-design-pro/utils/request.js @@ -7,6 +7,24 @@ import store from '@/store'; import notification from 'ant-design-vue/es/notification'; import { VueAxios } from './axios'; +// 全局声明缓存变量 +var timestamp1; +var isRefreshing = false; + +let subscribers = [] +// 刷新 token 后, 将缓存的接口重新请求一次 +function onAccessTokenFetched(newToken) { + subscribers.forEach((callback) => { + callback(newToken) + }) + // 清空缓存接口 + subscribers = [] +} +// 添加缓存接口 +function addSubscriber(callback) { + subscribers.push(callback) +} + const errorMsgs = { noResponse: 'request failed, no response' }; @@ -77,25 +95,41 @@ request.interceptors.response.use(response => { let err = null; switch (code) { case '1201': - notification.error({ - message: '用户校验失败', - description: response.data.message - }); - store.dispatch('Logout').then(() => { + if (!timestamp1 || timestamp1 + 1632252465 < new Date().getTime()) { + timestamp1 = new Date().getTime(); + notification.error({ + message: '用户校验失败', + description: response.data.message + }); setTimeout(() => { - window.location.reload(); - }, 1500); - }) + store.dispatch('Logout').then(() => { + window.location.reload(); + }).catch((err) => { + this.$message.error(err.response.message) + }) + }, 1000) + } break; case '1207': - // token过期后,调接口,刷新token - store.dispatch('RefreshToken').then(() => { - // 再发请求 - return request(response.config); - }).catch((err) => { - this.$message.error(err.response.message) + if (!isRefreshing) { + isRefreshing = true + store.dispatch('RefreshToken').then(() => { + // 再发请求 + isRefreshing = false + onAccessTokenFetched(localStorage.getItem('Access-Token')) + }).catch(() => { + isRefreshing = false; + window.location.reload(); + }) + } + const retryRequest = new Promise((resolve) => { + addSubscriber((newToken) => { + response.config.headers['Access-Token'] = newToken; + response.config.url = response.config.url.replace(response.config.baseURL, '') + resolve(request(response.config)) + }) }) - break; + return retryRequest default: err = new Error(response.data.message); err.data = response.data.data; diff --git a/src/vendor/ant-design-pro/utils/util.js b/src/vendor/ant-design-pro/utils/util.js index 979e320..dd73f3e 100644 --- a/src/vendor/ant-design-pro/utils/util.js +++ b/src/vendor/ant-design-pro/utils/util.js @@ -2,6 +2,22 @@ * @file: antd vue框架的通用工具文件 */ +// 节流函数 +export function throttle(func, wait) { + let timeout; + return () => { + const context = this + const args = arguments + if (!timeout) { + func.apply(context, args); + timeout = setTimeout(function () { + timeout = null + }, wait) + } + } +} +export default throttle + export function timeFix() { const time = new Date(); const hour = time.getHours(); diff --git a/src/views/leaks/LeakTaskList.vue b/src/views/leaks/LeakTaskList.vue index d40d8d8..ca4b697 100644 --- a/src/views/leaks/LeakTaskList.vue +++ b/src/views/leaks/LeakTaskList.vue @@ -251,7 +251,8 @@ export default { handleTableChange(pagination, filters, sorter) { // 存储翻页状态 this.pagination = pagination; - this.filters = filters; + // this.filters = filters; + this.filters = Object.assign({}, this.filters, filters); this.sorter = sorter; // 出发排序、筛选、分页时,重新请求主机列表 this.getTaskList(); diff --git a/src/views/leaks/components/HostTable.vue b/src/views/leaks/components/HostTable.vue index 96a7737..4f9e431 100644 --- a/src/views/leaks/components/HostTable.vue +++ b/src/views/leaks/components/HostTable.vue @@ -20,8 +20,9 @@ 已修复 + - + -- Gitee