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:
+26
-1
@@ -60,6 +60,25 @@ const store = reactive<UserState>({
|
||||
|
||||
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();
|
||||
|
||||
Reference in New Issue
Block a user