From 6e050d649f388fb74a54ca86832efe9ee24b63be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Faleiros?= Date: Wed, 25 Feb 2026 11:12:57 -0300 Subject: [PATCH] fix: resolve infinite loading in Layout and add auth redirect --- components/Layout.tsx | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/components/Layout.tsx b/components/Layout.tsx index 83b6189..fc9ee08 100644 --- a/components/Layout.tsx +++ b/components/Layout.tsx @@ -29,23 +29,39 @@ export const Layout: React.FC<{ children: React.ReactNode }> = ({ children }) => useEffect(() => { const fetchCurrentUser = async () => { const storedUserId = localStorage.getItem('ctms_user_id'); - if (storedUserId) { + + if (!storedUserId) { + navigate('/login'); + return; + } + + try { const user = await getUserById(storedUserId); if (user) { setCurrentUser(user); + } else { + // User ID exists in storage but not in DB (deleted user?) + localStorage.removeItem('ctms_user_id'); + navigate('/login'); } + } catch (err) { + console.error("Failed to fetch user:", err); + // Fallback or error state } }; fetchCurrentUser(); - }, []); + }, [navigate]); const handleLogout = () => { localStorage.removeItem('ctms_user_id'); + localStorage.removeItem('ctms_tenant_id'); navigate('/login'); }; if (!currentUser) { - return
Carregando...
; + const storedUserId = localStorage.getItem('ctms_user_id'); + if (!storedUserId) return null; // Will redirect in useEffect + return
Autenticando...
; } const isSuperAdmin = currentUser.role === 'super_admin';