fix: optimizar chequeo de sesion en router para prevenir congelamiento de UI en panel de administracion y otras vistas
This commit is contained in:
@ -177,13 +177,27 @@ router.beforeEach(async (to, _from, next) => {
|
|||||||
return next()
|
return next()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verificar sesión activa con seguridad
|
// OBTENER SESIÓN DE FORMA RÁPIDA:
|
||||||
let session = null
|
// 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 {
|
try {
|
||||||
const { data } = await supabase.auth.getSession()
|
// Protección contra congelamiento: si no hay sesión en memoria, preguntamos a Supabase
|
||||||
session = data.session
|
// 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) {
|
} catch (e) {
|
||||||
console.error('SIBU | Auth Check Error:', e)
|
console.warn('SIBU | Router auth check timeout/error:', e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sin sesión en ruta protegida → login
|
// Sin sesión en ruta protegida → login
|
||||||
|
|||||||
Reference in New Issue
Block a user