diff --git a/apps/web/src/components/layout/Header.tsx b/apps/web/src/components/layout/Header.tsx
index 58caf840b..b5fa669d4 100644
--- a/apps/web/src/components/layout/Header.tsx
+++ b/apps/web/src/components/layout/Header.tsx
@@ -37,6 +37,7 @@ export function Header(_props: HeaderProps) {
const navigate = useNavigate();
const handleLogout = async () => {
+ setIsUserMenuOpen(false);
await logout();
navigate('/login');
};
diff --git a/apps/web/src/features/auth/pages/LoginPage.tsx b/apps/web/src/features/auth/pages/LoginPage.tsx
index 8ac6ec313..f650648d0 100644
--- a/apps/web/src/features/auth/pages/LoginPage.tsx
+++ b/apps/web/src/features/auth/pages/LoginPage.tsx
@@ -60,19 +60,9 @@ export function LoginPage() {
}
}, []);
- // Rediriger si déjà connecté (mais attendre que le chargement soit terminé)
+ // Rediriger si déjà connecté (user data géré par React Query, pas dans persist)
if (isAuthenticated && !isLoading && !loading) {
- const stored = localStorage.getItem('auth-storage');
- if (stored) {
- try {
- const parsed = JSON.parse(stored);
- if (parsed.state?.user && parsed.state?.isAuthenticated) {
- return ;
- }
- } catch {
- // Continue, pas encore persisté
- }
- }
+ return ;
}
const validateField = (
diff --git a/apps/web/src/features/auth/store/authStore.ts b/apps/web/src/features/auth/store/authStore.ts
index 577a6d4f3..e09b174fe 100644
--- a/apps/web/src/features/auth/store/authStore.ts
+++ b/apps/web/src/features/auth/store/authStore.ts
@@ -12,6 +12,7 @@ import {
} from '@/services/api/auth';
import { TokenStorage } from '@/services/tokenStorage';
import { csrfService } from '@/services/csrf';
+import { getQueryClient } from '@/utils/queryClientSingleton';
import { broadcastSync } from '@/utils/broadcastSync';
import { logger } from '@/utils/logger';
import type { ApiError } from '@/schemas/apiSchemas';
@@ -206,6 +207,12 @@ export const useAuthStore = create()(
// Supprimer le token CSRF
csrfService.clearToken();
+ // Clear React Query user cache
+ const qc = getQueryClient();
+ if (qc) {
+ qc.removeQueries({ queryKey: ['user', 'me'] });
+ }
+
// Nettoyer l'état
set({
isAuthenticated: false,
diff --git a/apps/web/src/services/api/auth.ts b/apps/web/src/services/api/auth.ts
index c1e9b23f2..cc1df0357 100644
--- a/apps/web/src/services/api/auth.ts
+++ b/apps/web/src/services/api/auth.ts
@@ -7,6 +7,7 @@ import {
initializeProactiveRefresh,
cleanupProactiveRefresh,
} from '../tokenRefresh';
+import { getQueryClient } from '@/utils/queryClientSingleton';
import { logger } from '@/utils/logger';
import type { User } from '@/types';
@@ -344,6 +345,11 @@ export async function logout(): Promise {
cleanupProactiveRefresh();
// Supprimer tokens du storage
TokenStorage.clearTokens();
+ // Clear React Query user cache to avoid stale user data after logout
+ const qc = getQueryClient();
+ if (qc) {
+ qc.removeQueries({ queryKey: ['user', 'me'] });
+ }
}
}