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()
|
||||
}
|
||||
|
||||
// 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
|
||||
|
||||
Reference in New Issue
Block a user