fix:priviledge caching led to no pages showing
This commit is contained in:
parent
6c90a00677
commit
05508cc76c
2 changed files with 63 additions and 14 deletions
|
|
@ -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');
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue