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:
+23
-1
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user