修复刷新token失效无限重定向

This commit is contained in:
mtvpls
2026-01-27 20:43:19 +08:00
parent 258c95f6a2
commit 58f3bf99dc
+13
View File
@@ -527,6 +527,16 @@ async function fetchWithAuth(
if (res.status === 401) { if (res.status === 401) {
const text = await res.clone().text(); const text = await res.clone().text();
if (text === 'Access token expired') { if (text === 'Access token expired') {
// 检查是否是登录相关的接口,如果是则不刷新
if (
url.includes('/api/login') ||
url.includes('/api/register') ||
url.includes('/api/auth/oidc') ||
url.includes('/api/auth/refresh')
) {
throw new Error('用户未授权');
}
// 尝试刷新 token // 尝试刷新 token
const refreshRes = await fetch('/api/auth/refresh', { const refreshRes = await fetch('/api/auth/refresh', {
method: 'POST', method: 'POST',
@@ -541,6 +551,8 @@ async function fetchWithAuth(
// 如果刷新后仍然是 401,或者是其他 401 错误,跳转登录 // 如果刷新后仍然是 401,或者是其他 401 错误,跳转登录
if (res.status === 401) { if (res.status === 401) {
// 检查当前页面是否已经是登录页,避免重复跳转
if (typeof window !== 'undefined' && !window.location.pathname.startsWith('/login')) {
// 调用 logout 接口 // 调用 logout 接口
try { try {
await fetch('/api/logout', { await fetch('/api/logout', {
@@ -554,6 +566,7 @@ async function fetchWithAuth(
const loginUrl = new URL('/login', window.location.origin); const loginUrl = new URL('/login', window.location.origin);
loginUrl.searchParams.set('redirect', currentUrl); loginUrl.searchParams.set('redirect', currentUrl);
window.location.href = loginUrl.toString(); window.location.href = loginUrl.toString();
}
throw new Error('用户未授权,已跳转到登录页面'); throw new Error('用户未授权,已跳转到登录页面');
} }
} }