From 51ce890db7b4c0101a4d89e6f71ad6f5d060cdce Mon Sep 17 00:00:00 2001 From: scout <1134087124@qq.com> Date: Tue, 14 May 2024 09:31:27 +0800 Subject: [PATCH] fixbug --- src/utils/request/request.js | 3 ++ src/views/chat/index.vue | 63 ++++++++++++++++++++++++++++++++++-- 2 files changed, 63 insertions(+), 3 deletions(-) diff --git a/src/utils/request/request.js b/src/utils/request/request.js index a2fc1c8..d4fedb8 100644 --- a/src/utils/request/request.js +++ b/src/utils/request/request.js @@ -25,6 +25,7 @@ request.interceptors.request.use((config)=>{ request.interceptors.response.use(async (res)=>{ // 如果返回401,说明token过期,需要重新登录 if (res && res.data.code === 401) { + console.log("token过期"); return getRefreshToken(res); } loading?.close() @@ -34,6 +35,7 @@ request.interceptors.response.use(async (res)=>{ }); // 获取刷新token,刷新token成功后重新请求 const getRefreshToken = async (response) => { + console.log("刷新token",isRefreshing); if (!isRefreshing) { isRefreshing = true; const refreshToken = Local.get("RefreshToken"); @@ -74,6 +76,7 @@ const getRefreshToken = async (response) => { } else { // 重新登录 await router.push('/login') + loading?.close() return Promise.reject(response); } } else { diff --git a/src/views/chat/index.vue b/src/views/chat/index.vue index 8872fc2..9203646 100644 --- a/src/views/chat/index.vue +++ b/src/views/chat/index.vue @@ -135,6 +135,7 @@ const handleResponseStream = async (reader) => { } = await reader.read(); if (!done) { let decoded = new TextDecoder().decode(value); + console.log(decoded,'decoded') let decodedArray = decoded.split("data: "); for (const decoded of decodedArray) { if (decoded !== "") { @@ -159,6 +160,56 @@ const handleResponseStream = async (reader) => { await handleResponseStream(reader); } }; +let isRefreshing = false; +let refreshSubscribers = []; +// 获取刷新token,刷新token成功后重新请求 +const getRefreshToken = async (response) => { + if (!isRefreshing) { + isRefreshing = true; + const refreshToken = Local.get("RefreshToken"); + if (refreshToken) { + try { + const data = { refreshToken }; + const res = await fetch( + import.meta.env.VITE_APP_API_BASE_URL+"/user/refresh/token", + { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(data), + } + ); + const responseData = await res.json(); // Parse the response body as JSON + if (responseData.code === 200) { + Local.set("token", responseData.data.Token); + Local.set("userInfo", responseData.data.AccountInfo); + Local.set("RefreshToken", responseData.data.RefreshToken); + location.reload(); + } else { + // 重新登录 + await router.push('/login'); + responseData.message = responseData.message || responseData.msg; + return Promise.reject(responseData); + } + } catch (error) { + return Promise.reject(error); + } finally { + isRefreshing = false; + refreshSubscribers.forEach((callback) => callback()); + refreshSubscribers = []; + } + } else { + // 重新登录 + await router.push('/login') + return Promise.reject(response); + } + } else { + return new Promise((resolve) => { + + }); + } + }; const sendDataStream = async () => { const params = createParams(); fileList.value = [] @@ -183,12 +234,18 @@ const sendDataStream = async () => { Authorization: Local.get('token'), }, }); - +console.log(response,'response') const contentType = response.headers.get('Content-Type'); if (!contentType || !contentType.includes('application/json')) { const reader = response.body.getReader(); dataSources.value[dataSources.value.length - 1].text = '' await handleResponseStream(reader); + }else{ + const responseData = await response.json(); + if (responseData.code === 401) { + await getRefreshToken(response); + } + } } catch (error) { console.error('发生错误:', error); @@ -336,7 +393,7 @@ const footerClass = computed(() => { }) const isShowBottom=ref(false) onMounted(() => { - + if(!Local.get('token')){ router.push('/login') } @@ -528,7 +585,7 @@ const customRequest = async (file) => {