🚀 Auto-deploy: Acesso direto implementado (Bypass Auth) e correção de chamadas .auth

This commit is contained in:
2026-04-03 21:20:54 +00:00
parent 556a2ace41
commit 5673eb5255

View File

@@ -32,20 +32,23 @@ export const useAuth = () => {
// Verificar sessão atual // Verificar sessão atual
const getSession = async () => { const getSession = async () => {
try { try {
const { data: { session }, error } = await supabaseAuth.getSession(); const { data: { session }, error } = await supabaseAuth.auth.getSession();
if (error) throw error; if (error) throw error;
console.log('✅ useAuth: Sessão recuperada:', session?.user?.email); 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) { if (!session?.user) {
setAuthState({ console.log('⚠️ useAuth: Nenhuma sessão ativa. Tentando bypass automático...');
user: null, const result = await bypassLogin();
session: null, if (!result.success) {
loading: false, setAuthState({
error: null user: null,
}); session: null,
console.log('⚠️ useAuth: Nenhuma sessão ativa'); loading: false,
error: null
});
}
return; return;
} }
@@ -99,7 +102,7 @@ export const useAuth = () => {
getSession(); getSession();
// Escutar mudanças de autenticação // Escutar mudanças de autenticação
const { data: { subscription } } = supabaseAuth.onAuthStateChange( const { data: { subscription } } = supabaseAuth.auth.onAuthStateChange(
async (event, session) => { async (event, session) => {
console.log('🔔 Auth state changed:', event, session?.user?.email); console.log('🔔 Auth state changed:', event, session?.user?.email);
@@ -295,7 +298,7 @@ export const useAuth = () => {
setAuthState(prev => ({ ...prev, loading: true, error: null })); setAuthState(prev => ({ ...prev, loading: true, error: null }));
console.log('🌐 useAuth: Chamando supabaseAuth.signInWithPassword...'); console.log('🌐 useAuth: Chamando supabaseAuth.signInWithPassword...');
const { data, error } = await supabaseAuth.signInWithPassword({ const { data, error } = await supabaseAuth.auth.signInWithPassword({
email: credentials.email, email: credentials.email,
password: credentials.password password: credentials.password
}); });
@@ -326,7 +329,7 @@ export const useAuth = () => {
try { try {
setAuthState(prev => ({ ...prev, loading: true, error: null })); setAuthState(prev => ({ ...prev, loading: true, error: null }));
const { data, error } = await supabaseAuth.signUp({ const { data, error } = await supabaseAuth.auth.signUp({
email: credentials.email, email: credentials.email,
password: credentials.password, password: credentials.password,
options: { options: {
@@ -360,7 +363,7 @@ export const useAuth = () => {
}); });
// 2. Disparar signOut do Supabase em background (sem await para não travar a UI) // 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 // 3. Limpar estado local do hook
setAuthState({ setAuthState({
@@ -379,7 +382,7 @@ export const useAuth = () => {
const resetPassword = async (email: string) => { const resetPassword = async (email: string) => {
try { try {
const { error } = await supabaseAuth.resetPasswordForEmail(email, { const { error } = await supabaseAuth.auth.resetPasswordForEmail(email, {
redirectTo: `${window.location.origin}/reset-password` redirectTo: `${window.location.origin}/reset-password`
}); });
@@ -392,7 +395,7 @@ export const useAuth = () => {
const updatePassword = async (newPassword: string) => { const updatePassword = async (newPassword: string) => {
try { try {
const { error } = await supabaseAuth.updateUser({ const { error } = await supabaseAuth.auth.updateUser({
password: newPassword password: newPassword
}); });
@@ -408,7 +411,7 @@ export const useAuth = () => {
if (!authState.user) throw new Error('Usuário não autenticado'); if (!authState.user) throw new Error('Usuário não autenticado');
// Atualizar metadados do usuário // Atualizar metadados do usuário
const { error: authError } = await supabaseAuth.updateUser({ const { error: authError } = await supabaseAuth.auth.updateUser({
data: updates data: updates
}); });
@@ -433,33 +436,65 @@ export const useAuth = () => {
setAuthState(prev => ({ ...prev, error: null })); setAuthState(prev => ({ ...prev, error: null }));
}; };
// Função de bypass para desenvolvimento // Função de bypass para desenvolvimento e acesso direto
const bypassLogin = async () => { const bypassLogin = async () => {
console.log('🚧 useAuth: Iniciando bypass de desenvolvimento...'); console.log('🚧 useAuth: Iniciando bypass de acesso direto...');
try { try {
setAuthState(prev => ({ ...prev, loading: true, error: null })); 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 = { const mockUser = {
id: 'bypass-user-' + Date.now(), id: userId,
email: 'bypass@desenvolvimento.com', email: userEmail,
user_metadata: { user_metadata: {
nome: 'Usuário Bypass' nome: userName,
full_name: userName
}, },
aud: 'authenticated', aud: 'authenticated',
role: 'authenticated', role: 'authenticated',
app_metadata: {}, app_metadata: {},
created_at: new Date().toISOString() created_at: realUser?.created_at || new Date().toISOString()
}; };
const mockSession = { const mockSession = {
access_token: 'mock-token', access_token: 'mock-token-' + Date.now(),
refresh_token: 'mock-refresh', refresh_token: 'mock-refresh-' + Date.now(),
expires_in: 3600, expires_in: 3600,
token_type: 'bearer', token_type: 'bearer',
user: mockUser 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 // Atualizar estado de autenticação
setAuthState({ setAuthState({
user: mockUser as unknown as User, user: mockUser as unknown as User,
@@ -468,7 +503,7 @@ export const useAuth = () => {
error: null 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 } }; return { success: true, data: { user: mockUser as unknown as User, session: mockSession as unknown as Session } };
} catch (error: unknown) { } catch (error: unknown) {
console.error('❌ useAuth: Erro no bypass:', error); console.error('❌ useAuth: Erro no bypass:', error);