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