fix: try-catch en onAuthStateChange — loading nunca queda bloqueado en error

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-28 00:37:55 -03:00
parent f913fc26e2
commit 180ba2abe7

View File

@@ -24,6 +24,8 @@ export class SupabaseAuthService implements AuthService {
onAuthStateChange(callback: (user: AuthUser | null) => void): () => void {
const { data: { subscription } } = supabase.auth.onAuthStateChange(
async (event, session) => {
// Siempre llamar callback — incluso si falla algo interno
try {
if (!session?.user) {
callback(null)
return
@@ -32,7 +34,7 @@ export class SupabaseAuthService implements AuthService {
if (event === 'SIGNED_IN') {
const email = session.user.email ?? ''
const role = email.endsWith('@inquality.com.py') ? 'platform_admin' : 'guest'
await supabase.from('users').upsert(
const { error: upsertError } = await supabase.from('users').upsert(
{
id: session.user.id,
name: session.user.user_metadata?.full_name ?? email,
@@ -41,10 +43,25 @@ export class SupabaseAuthService implements AuthService {
},
{ onConflict: 'id', ignoreDuplicates: true }
)
if (upsertError) console.error('Error al crear usuario en DB:', upsertError)
}
const user = await this.buildAuthUser(session.user)
callback(user)
} catch (err) {
console.error('Error en onAuthStateChange:', err)
// Garantizar que loading se desbloquea incluso en error
if (session?.user) {
callback({
id: session.user.id,
email: session.user.email ?? '',
name: session.user.user_metadata?.full_name as string ?? session.user.email ?? '',
platformRole: 'guest',
})
} else {
callback(null)
}
}
}
)