批量更新
This commit is contained in:
1 parent
fa281363fb
commit
c5ed596008
47 files changed
+5385
-1199
No files matched your search
@@ -171,6 +171,48 @@ export async function logoutSSO() {
|
||||
window.location.href = `${AUTH_BASE}/logout?${params.toString()}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* 确保本地存在完整的用户信息(含 id / group_id)。
|
||||
*
|
||||
* 场景:统一认证上线或 ID 全量迁移后,浏览器里可能残留旧会话——
|
||||
* 只有 token 没有 userInfo,或 userInfo 缺少 id,菜单等接口会报
|
||||
*「用户ID不存在」。这里主动补全;若令牌已失效则清空登录态返回 null,
|
||||
* 由调用方跳转登录。
|
||||
*/
|
||||
export async function ensureUserInfo() {
|
||||
let info = null;
|
||||
try {
|
||||
const raw = localStorage.getItem('userInfo');
|
||||
info = raw ? JSON.parse(raw) : null;
|
||||
} catch (e) {
|
||||
info = null;
|
||||
}
|
||||
if (info && info.id) {
|
||||
return info;
|
||||
}
|
||||
|
||||
try {
|
||||
const data = await fetchUserInfo();
|
||||
const normalized = {
|
||||
id: data.id || data.sub || '',
|
||||
account: data.account || data.mobile || '',
|
||||
name: data.name || data.nickname || '',
|
||||
group_id: data.group_id || '',
|
||||
tid: data.tid || '',
|
||||
tenant_name: (data.tenants || []).map((t) => t.tenant_name).join('、'),
|
||||
avatar: data.avatar || '',
|
||||
type: 'backend'
|
||||
};
|
||||
localStorage.setItem('userInfo', JSON.stringify(normalized));
|
||||
return normalized;
|
||||
} catch (e) {
|
||||
// 令牌无效(例如迁移前的旧令牌):清掉本地状态,让调用方重新登录
|
||||
clearTokens();
|
||||
localStorage.removeItem('userInfo');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/** 拉取当前登录用户(认证中心视角) */
|
||||
export async function fetchUserInfo() {
|
||||
const res = await fetch(`${AUTH_BASE}/userinfo`, {
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
import axios from 'axios';
|
||||
import { isSSOEnabled, refreshAccessToken, clearTokens } from '@/utils/authClient';
|
||||
import { isSSOEnabled, refreshAccessToken, clearTokens, redirectToAuthorize } from '@/utils/authClient';
|
||||
|
||||
// 统一认证模式下 401 后正在跳转登录的标志,避免并发请求同时触发跳转造成死循环
|
||||
let ssoRedirecting = false;
|
||||
|
||||
// 获取API基础URL,添加调试信息
|
||||
const apiBaseURL = import.meta.env.VITE_API_BASE_URL;
|
||||
@@ -56,10 +59,14 @@ service.interceptors.response.use(
|
||||
error.config.headers['Authorization'] = `Bearer ${newToken}`;
|
||||
return service.request(error.config);
|
||||
} catch (e) {
|
||||
// 续期失败:清空登录态并跳认证中心重新登录(只跳一次,避免死循环)
|
||||
clearTokens();
|
||||
localStorage.removeItem('userInfo');
|
||||
window.location.href = '#/login';
|
||||
return Promise.reject(new Error('token无效'));
|
||||
if (!ssoRedirecting) {
|
||||
ssoRedirecting = true;
|
||||
redirectToAuthorize();
|
||||
}
|
||||
return Promise.reject(new Error('token无效,请重新登录'));
|
||||
}
|
||||
}
|
||||
console.error('未授权,请重新登录');
|
||||
|
||||
Reference in new issue
Block a user