From b845623714a25192b00a5eec14eef88a4807f89e Mon Sep 17 00:00:00 2001 From: Marcos Reifonas Date: Tue, 18 Aug 2026 10:36:54 +0000 Subject: [PATCH] =?UTF-8?q?fix(auth):=20sincronizar=20user=20Logto=20?= =?UTF-8?q?=E2=86=92=20profiles=20Supabase=20ao=20logar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Profiles Supabase estavam sem user.id do Logto (sub) - Por isso queries .eq('id', user.id) retornavam 400 Bad Request - Adiciona syncUserToProfile() que faz upsert em profiles ao logar - Evita quebra de hooks como UserInfo, useTasks, useObra, etc --- src/hooks/useAuth.tsx | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/hooks/useAuth.tsx b/src/hooks/useAuth.tsx index 846ce9c..e6c54ef 100644 --- a/src/hooks/useAuth.tsx +++ b/src/hooks/useAuth.tsx @@ -9,6 +9,7 @@ import React, { useCallback, ReactNode, } from 'react'; +import { supabase } from '@/integrations/supabase/client'; import { LogtoUser, signIn as logtoSignIn, @@ -19,6 +20,23 @@ import { requestPasswordReset, } from '@/lib/logto/client'; +// Sincroniza user Logto com profiles Supabase +async function syncUserToProfile(user: LogtoUser): Promise { + if (!user?.sub) return; + try { + await supabase.from('profiles').upsert( + { + id: user.sub, + full_name: user.name || user.email || user.username || 'Usuário', + email: user.email || null, + }, + { onConflict: 'id', ignoreDuplicates: false } + ); + } catch (err) { + console.warn('Erro ao sincronizar profile Supabase:', err); + } +} + export interface UseAuthReturn { user: LogtoUser | null; loading: boolean; @@ -46,7 +64,10 @@ export function AuthProvider({ children }: { children: ReactNode }) { setLoading(true); handleCallback().then((ok) => { if (ok) { - logtoGetUser().then(setUser); + logtoGetUser().then((u) => { + setUser(u); + if (u) syncUserToProfile(u); + }); } setAuthInitialized(true); setLoading(false); @@ -56,6 +77,7 @@ export function AuthProvider({ children }: { children: ReactNode }) { if (isAuthenticated()) { logtoGetUser().then((u) => { setUser(u); + if (u) syncUserToProfile(u); setLoading(false); }); } else {