From 1089796416826a72fe8a519821940210719d8ac6 Mon Sep 17 00:00:00 2001 From: Steven Date: Sun, 12 Oct 2025 21:51:25 -0500 Subject: [PATCH] Enhance user session management by conditionally refreshing session based on route This commit updates the user session handling in the userStore to skip session refresh for specific routes. It also improves error logging messages for better clarity during session verification and logout processes. --- context/core/userStore.ts | 17 +++++++++++------ middlewares/store-access/store.ts | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/context/core/userStore.ts b/context/core/userStore.ts index eebcd4c0..c9083f98 100644 --- a/context/core/userStore.ts +++ b/context/core/userStore.ts @@ -71,8 +71,13 @@ const useAuthStore = create((set, get) => ({ try { set({ loading: true, error: null }); - // Inicia la promesa para refrescar la sesión - refreshSessionPromise = fetchAuthSession({ forceRefresh: true }); + // Verificar si estamos en rutas donde no se debe hacer refresh + const pathname = window.location.pathname; + const NO_REFRESH_ROUTES = ['/first-steps', '/my-store']; + const shouldSkipRefresh = NO_REFRESH_ROUTES.includes(pathname); + + // Inicia la promesa para refrescar la sesión (sin forceRefresh en rutas específicas) + refreshSessionPromise = fetchAuthSession({ forceRefresh: !shouldSkipRefresh }); const session = await refreshSessionPromise; if (session && session.tokens) { @@ -98,16 +103,16 @@ const useAuthStore = create((set, get) => ({ get().clearUser(); } } catch (error: any) { - console.error('Error al verificar la sesión del usuario:', error); + console.error('Error verifying user session:', error); if (error.name === 'NotAuthorizedException' || (error.message && error.message.includes('revoked'))) { - console.warn('Token revocado detectado. Forzando cierre de sesión y recarga completa.'); + console.warn('Token revoked detected. Forcing logout and full reload.'); try { // Intenta cerrar sesión en Cognito, pero no dejes que falle si ya hay problemas await signOut(); } catch (signOutError) { - console.error('Error secundario al intentar signOut forzado:', signOutError); + console.error('Secondary error when trying to force signOut:', signOutError); } finally { // La acción más importante: limpiar el estado y recargar la aplicación get().clearUser(); @@ -174,7 +179,7 @@ const useAuthStore = create((set, get) => ({ try { await signOut(); } catch (error) { - console.error('Error durante el logout en Amplify:', error); + console.error('Error during logout:', error); } finally { get().clearUser(); get().cleanup(); diff --git a/middlewares/store-access/store.ts b/middlewares/store-access/store.ts index 770cdf74..83724d65 100644 --- a/middlewares/store-access/store.ts +++ b/middlewares/store-access/store.ts @@ -58,7 +58,7 @@ export async function handleStoreMiddleware(request: NextRequest, response: Next return authResponse; // Si hay redirección de auth, retornarla } - // Obtener la sesión del usuario (ya validada) + // Obtener la sesión del usuario (ya validada) - sin refresh para rutas específicas const session = await getSession(request, response, false); const userId = (session as AuthSession).tokens?.idToken?.payload?.['cognito:username'];