fix: cookie expire redirect

This commit is contained in:
engigu
2025-09-20 15:57:05 +08:00
parent cdf96fee0b
commit abc15e3b84
2 changed files with 37 additions and 16 deletions
+30 -12
View File
@@ -1,6 +1,6 @@
// request.js // request.js
import axios from 'axios'; import axios from 'axios';
import { useRouter } from 'vue-router'; import router from '../router';
import { usePageState } from '../store/page_sate'; import { usePageState } from '../store/page_sate';
import { CONSTANT } from '../constant'; import { CONSTANT } from '../constant';
@@ -41,24 +41,41 @@ request.interceptors.request.use(
// 响应拦截器 // 响应拦截器
request.interceptors.response.use( request.interceptors.response.use(
(response) => { (response) => {
// 检查业务逻辑错误
if (response && response.data.code != 200) { if (response && response.data.code != 200) {
// 检查是否是token相关的错误码
const tokenErrorCodes = [20001, 20002, 20003, 20004, 20005];
if (tokenErrorCodes.includes(response.data.code)) {
// Token失效,执行登出
logout();
return Promise.reject(response);
}
// 其他业务错误显示toast
toast.error(response.data.msg, { toast.error(response.data.msg, {
description: '接口逻辑错误' description: '接口逻辑错误'
}) });
// Promise.reject();
} }
return response; return response;
}, },
(error) => { (error) => {
// HTTP状态码401表示未授权
if (error.response && error.response.status == 401) { if (error.response && error.response.status == 401) {
logout(); // 检查响应体中的业务错误码
} else if (error.response && 20000 <= error.response.status && error.response.status <= 29999) { if (error.response.data && error.response.data.code) {
const tokenErrorCodes = [20001, 20002, 20003, 20004, 20005];
if (tokenErrorCodes.includes(error.response.data.code)) {
logout();
return Promise.reject(error);
}
}
// 其他401错误也执行登出
logout(); logout();
} else { } else {
handleException(error); handleException(error);
} }
return Promise.reject(error);
} }
); );
@@ -80,13 +97,14 @@ const handleException = (error) => {
// 登出系统 // 登出系统
const logout = () => { const logout = () => {
const router = useRouter();
const pageState = usePageState(); const pageState = usePageState();
pageState.setIsLogin(false);
// 清除token和登录状态
pageState.setToken('');
localStorage.removeItem(CONSTANT.STORE_TOKEN_NAME); localStorage.removeItem(CONSTANT.STORE_TOKEN_NAME);
setTimeout(() => {
router.push('/login'); // 立即跳转到登录页
}, 500); router.push('/login');
}; };
export { request, handleException, logout }; export { request, handleException, logout };
+7 -4
View File
@@ -83,13 +83,16 @@ router.beforeEach((to, from, next) => {
return; return;
} }
// 如果没有token且不是访问登录页,跳转到登录页
if (!isAuthenticated && to.path !== '/login') { if (!isAuthenticated && to.path !== '/login') {
next('/login'); next('/login');
} else if (isAuthenticated && to.path === '/login') { }
// 如果有token且访问登录页,跳转到首页
else if (isAuthenticated && to.path === '/login') {
next('/'); next('/');
} else { }
// 其他情况正常访问
else {
next(); next();
} }
}); });