From caec272e01c3001d7349a64352bf24c7a7a9b844 Mon Sep 17 00:00:00 2001 From: "han\\hanst" Date: Tue, 16 Dec 2025 16:26:37 +0800 Subject: [PATCH] =?UTF-8?q?session=E8=BF=87=E6=9C=9F=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E8=B7=B3=E8=BD=AC=E5=88=B0=E7=99=BB=E5=BD=95=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router/index.js | 25 +++++++++++++++++++++--- src/utils/httpRequest.js | 42 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 3 deletions(-) diff --git a/src/router/index.js b/src/router/index.js index 287a1c0..4980d2f 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -156,12 +156,13 @@ const mainRoutes = { { path: '/home', component: _import('common/home'), name: 'home', meta: { title: '首页' } }, ], beforeEnter (to, from, next) { - let token =Vue.cookie.get('token') + let token = Vue.cookie.get('token') if (!token || !/\S/.test(token)) { clearLoginInfo() next({ name: 'login' }) + } else { + next() } - next() } } @@ -175,6 +176,16 @@ const router = new Router({ }) router.beforeEach((to, from, next) => { + // 检查登录状态(除了登录页和404页) + if (to.name !== 'login' && to.name !== '404') { + let token = Vue.cookie.get('token') + if (!token || !/\S/.test(token)) { + clearLoginInfo() + next({ name: 'login' }) + return + } + } + // 添加动态(菜单)路由 // 1. 已经添加 or 全局路由, 直接访问 // 2. 获取菜单列表, 添加并保存本地存储 @@ -192,10 +203,18 @@ router.beforeEach((to, from, next) => { sessionStorage.setItem('menuList', JSON.stringify(data.menuList || '[]')) sessionStorage.setItem('permissions', JSON.stringify(data.permissions || '[]')) //next({ ...to, replace: true }) + } else if (data && data.code === 401) { + // session过期 + console.log('会话已过期,跳转至登录页') + clearLoginInfo() + next({ name: 'login' }) + return } }).catch((e) => { console.log(`%c${e} 请求菜单列表和权限失败,跳转至登录页!!`, 'color:blue') - router.push({ name: 'login' }) + clearLoginInfo() + next({ name: 'login' }) + return }) router.options.isAddDynamicMenuRoutes = true next({ ...to, replace: true }) diff --git a/src/utils/httpRequest.js b/src/utils/httpRequest.js index 029011c..25fd986 100644 --- a/src/utils/httpRequest.js +++ b/src/utils/httpRequest.js @@ -35,6 +35,27 @@ http.interceptors.response.use(response => { } return response }, error => { + // 处理HTTP错误响应 + if (error.response) { + // 服务器返回了错误状态码 + if (error.response.status === 401) { + // HTTP 401 未授权 + clearLoginInfo() + router.push({ name: 'login' }) + return Promise.reject(error) + } + + // 检查响应体中的code字段 + if (error.response.data && error.response.data.code === 401) { + clearLoginInfo() + router.push({ name: 'login' }) + return Promise.reject(error) + } + } else if (error.request) { + // 请求已发出但没有收到响应(网络错误) + console.error('网络请求失败:', error.message) + } + return Promise.reject(error) }) @@ -108,6 +129,27 @@ instance.interceptors.response.use(response => { } return response }, error => { + // 处理HTTP错误响应 + if (error.response) { + // 服务器返回了错误状态码 + if (error.response.status === 401) { + // HTTP 401 未授权 + clearLoginInfo() + router.push({ name: 'login' }) + return Promise.reject(error) + } + + // 检查响应体中的code字段 + if (error.response.data && error.response.data.code === 401) { + clearLoginInfo() + router.push({ name: 'login' }) + return Promise.reject(error) + } + } else if (error.request) { + // 请求已发出但没有收到响应(网络错误) + console.error('网络请求失败:', error.message) + } + return Promise.reject(error) })