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 { onAuthStateChange(callback: (user: AuthUser | null) => void): () => void {
const { data: { subscription } } = supabase.auth.onAuthStateChange( const { data: { subscription } } = supabase.auth.onAuthStateChange(
async (event, session) => { async (event, session) => {
// Siempre llamar callback — incluso si falla algo interno
try {
if (!session?.user) { if (!session?.user) {
callback(null) callback(null)
return return
@@ -32,7 +34,7 @@ export class SupabaseAuthService implements AuthService {
if (event === 'SIGNED_IN') { if (event === 'SIGNED_IN') {
const email = session.user.email ?? '' const email = session.user.email ?? ''
const role = email.endsWith('@inquality.com.py') ? 'platform_admin' : 'guest' 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, id: session.user.id,
name: session.user.user_metadata?.full_name ?? email, name: session.user.user_metadata?.full_name ?? email,
@@ -41,10 +43,25 @@ export class SupabaseAuthService implements AuthService {
}, },
{ onConflict: 'id', ignoreDuplicates: true } { onConflict: 'id', ignoreDuplicates: true }
) )
if (upsertError) console.error('Error al crear usuario en DB:', upsertError)
} }
const user = await this.buildAuthUser(session.user) const user = await this.buildAuthUser(session.user)
callback(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)
}
}
} }
) )