fix(auth): sincronizar user Logto → profiles Supabase ao logar

- 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
This commit is contained in:
2026-08-18 10:36:54 +00:00
parent 397d2e1e34
commit b845623714
+23 -1
View File
@@ -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<void> {
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 {