fix:priviledge caching led to no pages showing

This commit is contained in:
Ida Dittrich 2026-01-05 06:49:39 +01:00
parent 6c90a00677
commit 05508cc76c
2 changed files with 63 additions and 14 deletions

View file

@ -30,6 +30,15 @@ export function useCurrentUser() {
// Check if we already have user data in sessionStorage cache
const cachedUser = getUserDataCache();
if (cachedUser) {
// Validate cached user data - if privilege is missing, refetch from API
if (cachedUser.privilege === undefined || cachedUser.privilege === null) {
console.warn('⚠️ Cached user data missing privilege, refetching from API...', {
username: cachedUser.username,
privilege: cachedUser.privilege
});
// Clear incomplete cache and continue to fetch from API
clearUserDataCache();
} else {
setUser(cachedUser);
console.log('✅ Using cached user data from sessionStorage (persists during session):', {
username: cachedUser.username,
@ -37,6 +46,7 @@ export function useCurrentUser() {
});
return;
}
}
// JWT tokens are now stored in httpOnly cookies, so we fetch user data from API
console.log('🍪 JWT tokens are in httpOnly cookies, fetching user data from API');
@ -64,13 +74,37 @@ export function useCurrentUser() {
}
const data = await fetchCurrentUserApi(request, authAuthority || undefined);
// Log full response for debugging
console.log('📦 User data received from API:', {
username: data?.username,
privilege: data?.privilege,
hasPrivilege: !!data?.privilege,
allKeys: data ? Object.keys(data) : [],
fullData: data
});
// Validate user data before caching - ensure privilege is present
if (!data || !data.privilege) {
console.error('❌ User data from API missing privilege field - this may cause permission issues:', {
username: data?.username,
privilege: data?.privilege,
dataKeys: data ? Object.keys(data) : [],
fullResponse: data
});
// Don't cache incomplete data - it will cause permission issues on next load
// But still set user so the app can function (permissions are checked via RBAC API)
setUser(data);
// Cache user data in sessionStorage (cleared on tab close - more secure than localStorage)
console.warn('⚠️ User data set but not cached due to missing privilege - will refetch on next load');
} else {
// Only cache if privilege is present
setUserDataCache(data);
console.log('✅ User data fetched from API and cached in sessionStorage (secure):', {
username: data.username,
privilege: data.privilege
});
setUser(data);
}
} catch (error: any) {
console.error('❌ Failed to fetch user data:', error);
@ -239,9 +273,16 @@ export function useCurrentUser() {
// Try to load user from sessionStorage cache first for faster initial load
const cachedUser = getUserDataCache();
if (cachedUser) {
// Validate cached user data - if privilege is missing, don't use cache
if (cachedUser.privilege === undefined || cachedUser.privilege === null) {
console.warn('⚠️ Cached user data missing privilege on mount, will refetch from API');
clearUserDataCache();
// Don't set user - let fetchCurrentUser handle it
} else {
setUser(cachedUser);
console.log('✅ Using cached user data from sessionStorage on mount (persists during session)');
}
}
// For OAuth authentication, wait a bit longer before fetching user data
const authAuthority = sessionStorage.getItem('auth_authority');

View file

@ -30,6 +30,14 @@ export interface CachedUserData {
*/
export const setUserDataCache = (userData: CachedUserData): void => {
if (userData) {
// Validate that privilege is present before caching
if (!userData.privilege) {
console.warn('⚠️ Attempted to cache user data without privilege, skipping cache:', {
username: userData.username,
hasPrivilege: !!userData.privilege
});
return;
}
try {
sessionStorage.setItem(USER_CACHE_KEY, JSON.stringify(userData));
} catch (error) {