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:
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user