fix: keep org context when refreshing user session

Avoid overwriting switched auth context with sudo2 token in read(); reuse Authorization as sudo token when current_org_id already exists.

Made-with: Cursor
This commit is contained in:
2026-04-27 23:42:20 +08:00
parent 29262d67ec
commit eb7c8e8831
+25
View File
@@ -60,6 +60,25 @@ const store = reactive<UserState>({
const teachers_loading = ref(false) const teachers_loading = ref(false)
function parseCurrentOrgIdFromToken(token: string | null): string | undefined {
if (!token) return undefined;
try {
const tokenParts = token.split('.');
if (tokenParts.length < 2) return undefined;
const payloadRaw = tokenParts[1].replace(/-/g, '+').replace(/_/g, '/');
const payloadJson = decodeURIComponent(
atob(payloadRaw)
.split('')
.map((char) => `%${(`00${char.charCodeAt(0).toString(16)}`).slice(-2)}`)
.join('')
);
const payload = JSON.parse(payloadJson);
return payload.current_org_id || undefined;
} catch (_error) {
return undefined;
}
}
export default function useUser(router?: Router) { export default function useUser(router?: Router) {
const { load_start, load_done } = useLoading(); const { load_start, load_done } = useLoading();
@@ -364,7 +383,13 @@ export default function useUser(router?: Router) {
// @ts-ignore // @ts-ignore
let userApp = user.infos[0] as HtyUserApp; let userApp = user.infos[0] as HtyUserApp;
setCurrentUser(user, userApp); setCurrentUser(user, userApp);
const authToken = window.localStorage.getItem(HtyAuthToken);
const currentOrgId = parseCurrentOrgIdFromToken(authToken);
if (currentOrgId) {
window.localStorage.setItem(HtySudoToken, authToken as string);
} else {
await sudo2(userApp.id); await sudo2(userApp.id);
}
await getTags(); await getTags();
await getMyTeachers(); await getMyTeachers();
await getSupervisor(); await getSupervisor();