diff --git a/src/hooks/useAuth.ts b/src/hooks/useAuth.ts index 37a132e..8cdf264 100644 --- a/src/hooks/useAuth.ts +++ b/src/hooks/useAuth.ts @@ -32,20 +32,23 @@ export const useAuth = () => { // Verificar sessão atual const getSession = async () => { try { - const { data: { session }, error } = await supabaseAuth.getSession(); + const { data: { session }, error } = await supabaseAuth.auth.getSession(); if (error) throw error; console.log('✅ useAuth: Sessão recuperada:', session?.user?.email); - // Se não tiver usuário, finaliza loading imediatamente + // Se não tiver usuário, tenta fazer bypass automático para acesso direto if (!session?.user) { - setAuthState({ - user: null, - session: null, - loading: false, - error: null - }); - console.log('⚠️ useAuth: Nenhuma sessão ativa'); + console.log('⚠️ useAuth: Nenhuma sessão ativa. Tentando bypass automático...'); + const result = await bypassLogin(); + if (!result.success) { + setAuthState({ + user: null, + session: null, + loading: false, + error: null + }); + } return; } @@ -99,7 +102,7 @@ export const useAuth = () => { getSession(); // Escutar mudanças de autenticação - const { data: { subscription } } = supabaseAuth.onAuthStateChange( + const { data: { subscription } } = supabaseAuth.auth.onAuthStateChange( async (event, session) => { console.log('🔔 Auth state changed:', event, session?.user?.email); @@ -295,7 +298,7 @@ export const useAuth = () => { setAuthState(prev => ({ ...prev, loading: true, error: null })); console.log('🌐 useAuth: Chamando supabaseAuth.signInWithPassword...'); - const { data, error } = await supabaseAuth.signInWithPassword({ + const { data, error } = await supabaseAuth.auth.signInWithPassword({ email: credentials.email, password: credentials.password }); @@ -326,7 +329,7 @@ export const useAuth = () => { try { setAuthState(prev => ({ ...prev, loading: true, error: null })); - const { data, error } = await supabaseAuth.signUp({ + const { data, error } = await supabaseAuth.auth.signUp({ email: credentials.email, password: credentials.password, options: { @@ -360,7 +363,7 @@ export const useAuth = () => { }); // 2. Disparar signOut do Supabase em background (sem await para não travar a UI) - supabaseAuth.signOut().catch(err => console.warn('Erro silencioso no signOut:', err)); + supabaseAuth.auth.signOut().catch(err => console.warn('Erro silencioso no signOut:', err)); // 3. Limpar estado local do hook setAuthState({ @@ -379,7 +382,7 @@ export const useAuth = () => { const resetPassword = async (email: string) => { try { - const { error } = await supabaseAuth.resetPasswordForEmail(email, { + const { error } = await supabaseAuth.auth.resetPasswordForEmail(email, { redirectTo: `${window.location.origin}/reset-password` }); @@ -392,7 +395,7 @@ export const useAuth = () => { const updatePassword = async (newPassword: string) => { try { - const { error } = await supabaseAuth.updateUser({ + const { error } = await supabaseAuth.auth.updateUser({ password: newPassword }); @@ -408,7 +411,7 @@ export const useAuth = () => { if (!authState.user) throw new Error('Usuário não autenticado'); // Atualizar metadados do usuário - const { error: authError } = await supabaseAuth.updateUser({ + const { error: authError } = await supabaseAuth.auth.updateUser({ data: updates }); @@ -433,33 +436,65 @@ export const useAuth = () => { setAuthState(prev => ({ ...prev, error: null })); }; - // Função de bypass para desenvolvimento + // Função de bypass para desenvolvimento e acesso direto const bypassLogin = async () => { - console.log('🚧 useAuth: Iniciando bypass de desenvolvimento...'); + console.log('🚧 useAuth: Iniciando bypass de acesso direto...'); try { setAuthState(prev => ({ ...prev, loading: true, error: null })); - // Simular um usuário autenticado + // Buscar um usuário real do banco para garantir que o app funcione com dados reais + // Usamos o cliente de serviço (bypass RLS) para encontrar o admin ou o primeiro usuário + const { data: realUsers, error: dbError } = await (supabase as any) + .from('usuarios') + .select('*') + .order('role', { ascending: true }) // Tenta pegar admin/dev primeiro + .limit(1); + + if (dbError) { + console.warn('⚠️ useAuth: Erro ao buscar usuário real para bypass:', dbError); + } + + const realUser = realUsers?.[0]; + + const userId = realUser?.id || '00000000-0000-0000-0000-000000000000'; + const userEmail = realUser?.email || 'admin@tracksteel.com.br'; + const userName = realUser?.nome || 'Administrador (Bypass)'; + + console.log(`👤 useAuth: Usando usuário para bypass: ${userName} (${userEmail})`); + + // Simular um usuário autenticado do Supabase const mockUser = { - id: 'bypass-user-' + Date.now(), - email: 'bypass@desenvolvimento.com', + id: userId, + email: userEmail, user_metadata: { - nome: 'Usuário Bypass' + nome: userName, + full_name: userName }, aud: 'authenticated', role: 'authenticated', app_metadata: {}, - created_at: new Date().toISOString() + created_at: realUser?.created_at || new Date().toISOString() }; const mockSession = { - access_token: 'mock-token', - refresh_token: 'mock-refresh', + access_token: 'mock-token-' + Date.now(), + refresh_token: 'mock-refresh-' + Date.now(), expires_in: 3600, token_type: 'bearer', user: mockUser }; + // Carregar perfil completo no store global antes de liberar o loading + const { useUserStore } = await import('../stores/useUserStore'); + + if (realUser) { + // Se temos o usuário real, já colocamos no store + useUserStore.getState().setCurrentUser(realUser); + } else { + // Fallback: tenta buscar ou cria estado inicial + await useUserStore.getState().fetchCurrentUser(userId).catch(() => {}); + } + // Atualizar estado de autenticação setAuthState({ user: mockUser as unknown as User, @@ -468,7 +503,7 @@ export const useAuth = () => { error: null }); - console.log('✅ useAuth: Bypass concluído com sucesso'); + console.log('✅ useAuth: Bypass de acesso direto concluído'); return { success: true, data: { user: mockUser as unknown as User, session: mockSession as unknown as Session } }; } catch (error: unknown) { console.error('❌ useAuth: Erro no bypass:', error);