From eb7c8e8831363c75ff11c288ec6c30eeb801741f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=E7=94=B7?= Date: Mon, 27 Apr 2026 23:42:20 +0800 Subject: [PATCH] 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 --- src/store/user.ts | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/store/user.ts b/src/store/user.ts index 9f7f951..e6f3fb1 100644 --- a/src/store/user.ts +++ b/src/store/user.ts @@ -60,6 +60,25 @@ const store = reactive({ 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) { const { load_start, load_done } = useLoading(); @@ -364,7 +383,13 @@ export default function useUser(router?: Router) { // @ts-ignore let userApp = user.infos[0] as HtyUserApp; setCurrentUser(user, userApp); - await sudo2(userApp.id); + 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 getTags(); await getMyTeachers(); await getSupervisor();