From 71dfb2beac70a5f12fc9c93c210cf9f12438f48a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Faleiros?= Date: Wed, 25 Feb 2026 11:21:45 -0300 Subject: [PATCH] fix: improve auth guard and resolve blank page issue --- components/Layout.tsx | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/components/Layout.tsx b/components/Layout.tsx index fc9ee08..2c230a7 100644 --- a/components/Layout.tsx +++ b/components/Layout.tsx @@ -30,8 +30,8 @@ export const Layout: React.FC<{ children: React.ReactNode }> = ({ children }) => const fetchCurrentUser = async () => { const storedUserId = localStorage.getItem('ctms_user_id'); - if (!storedUserId) { - navigate('/login'); + if (!storedUserId || storedUserId === 'undefined' || storedUserId === 'null') { + navigate('/login', { replace: true }); return; } @@ -42,11 +42,13 @@ export const Layout: React.FC<{ children: React.ReactNode }> = ({ children }) => } else { // User ID exists in storage but not in DB (deleted user?) localStorage.removeItem('ctms_user_id'); - navigate('/login'); + localStorage.removeItem('ctms_tenant_id'); + navigate('/login', { replace: true }); } } catch (err) { console.error("Failed to fetch user:", err); - // Fallback or error state + // If API fails completely, we might want to allow offline mode or retry + // For now, let's just log it. } }; fetchCurrentUser(); @@ -55,13 +57,15 @@ export const Layout: React.FC<{ children: React.ReactNode }> = ({ children }) => const handleLogout = () => { localStorage.removeItem('ctms_user_id'); localStorage.removeItem('ctms_tenant_id'); - navigate('/login'); + navigate('/login', { replace: true }); }; if (!currentUser) { const storedUserId = localStorage.getItem('ctms_user_id'); - if (!storedUserId) return null; // Will redirect in useEffect - return
Autenticando...
; + const isValid = storedUserId && storedUserId !== 'undefined' && storedUserId !== 'null'; + + if (!isValid) return null; + return
Iniciando sessão...
; } const isSuperAdmin = currentUser.role === 'super_admin';