fix: close module access lifecycle gaps
This commit is contained in:
@@ -236,7 +236,8 @@ async function readCurrentModuleAccess(fallback: ModuleAccess): Promise<ModuleAc
|
||||
const response = await hostApiFetch<ModuleAccessResponse>('/api/auth/me');
|
||||
if (!response.success) return fallback;
|
||||
return normalizeModuleAccess(response.moduleAccess);
|
||||
} catch {
|
||||
} catch (error) {
|
||||
if (isTerminalAuthError(error)) throw error;
|
||||
return fallback;
|
||||
}
|
||||
}
|
||||
@@ -347,9 +348,25 @@ export const useAuthStore = create<AuthState>()(
|
||||
return;
|
||||
}
|
||||
|
||||
const moduleAccess = await readCurrentModuleAccess(
|
||||
normalizeModuleAccess(state.moduleAccess),
|
||||
);
|
||||
let moduleAccess: ModuleAccess;
|
||||
try {
|
||||
moduleAccess = await readCurrentModuleAccess(
|
||||
normalizeModuleAccess(state.moduleAccess),
|
||||
);
|
||||
} catch (error) {
|
||||
if (!isCurrentAuthSessionEpoch(operationEpoch)) return;
|
||||
if (isTerminalAuthError(error)) {
|
||||
advanceAuthSessionEpoch();
|
||||
set({
|
||||
initialized: true,
|
||||
loading: false,
|
||||
error: '登录已过期,请重新授权。',
|
||||
...getClearedSession(),
|
||||
});
|
||||
return;
|
||||
}
|
||||
moduleAccess = normalizeModuleAccess(state.moduleAccess);
|
||||
}
|
||||
if (!isCurrentAuthSessionEpoch(operationEpoch)) return;
|
||||
set({ initialized: true, loading: false, error: null, moduleAccess });
|
||||
},
|
||||
@@ -383,7 +400,10 @@ export const useAuthStore = create<AuthState>()(
|
||||
});
|
||||
} catch (error) {
|
||||
if (!isCurrentAuthSessionEpoch(operationEpoch)) return;
|
||||
const message = error instanceof Error ? error.message : String(error);
|
||||
const terminal = isTerminalAuthError(error);
|
||||
const message = terminal
|
||||
? '登录已过期,请重新授权。'
|
||||
: (error instanceof Error ? error.message : String(error));
|
||||
advanceAuthSessionEpoch();
|
||||
set({ loading: false, error: message, ...getClearedSession() });
|
||||
throw new Error(message, { cause: error });
|
||||
@@ -431,8 +451,10 @@ export const useAuthStore = create<AuthState>()(
|
||||
return session.accessToken;
|
||||
} catch (error) {
|
||||
if (!isCurrentAuthSessionEpoch(operationEpoch)) return null;
|
||||
const message = error instanceof Error ? error.message : String(error);
|
||||
const terminal = isTerminalAuthError(error);
|
||||
const message = terminal
|
||||
? '登录已过期,请重新授权。'
|
||||
: (error instanceof Error ? error.message : String(error));
|
||||
if (terminal) advanceAuthSessionEpoch();
|
||||
set({
|
||||
initialized: true,
|
||||
|
||||
Reference in New Issue
Block a user