From 086375969bf48bdceb1bcc5a59abbfd87e05791b Mon Sep 17 00:00:00 2001 From: Hanzo_dev <2002samudiojohan@gmail.com> Date: Thu, 5 Mar 2026 13:08:20 -0500 Subject: [PATCH] fix: optimizar chequeo de sesion en router para prevenir congelamiento de UI en panel de administracion y otras vistas --- frontend/src/router/index.ts | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 17baeb4..7755cdd 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -177,13 +177,27 @@ router.beforeEach(async (to, _from, next) => { return next() } - // Verificar sesión activa con seguridad - let session = null - try { - const { data } = await supabase.auth.getSession() - session = data.session - } catch (e) { - console.error('SIBU | Auth Check Error:', e) + // OBTENER SESIÓN DE FORMA RÁPIDA: + // En lugar de llamar SIEMPRE a supabase.auth.getSession() (lo cual bloquea la UI varios segundos + // si el token expiró y necesita hacer fetch HTTP), usamos el estado en memoria primero. + const authStore = useAuthStore() + let session = authStore.userSession + + if (!session) { + try { + // Protección contra congelamiento: si no hay sesión en memoria, preguntamos a Supabase + // pero le damos un tiempo máximo de 3 segundos para responder y no trabar la app. + const timeoutMs = 3000 + const timeout = new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeoutMs)) + const result = await Promise.race([supabase.auth.getSession(), timeout]) as any + session = result?.data?.session || result?.session + + if (session) { + authStore.userSession = session + } + } catch (e) { + console.warn('SIBU | Router auth check timeout/error:', e) + } } // Sin sesión en ruta protegida → login