🚀 Auto-deploy: Acesso direto implementado (Bypass Auth) e correção de chamadas .auth
This commit is contained in:
@@ -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) {
|
||||||
|
console.log('⚠️ useAuth: Nenhuma sessão ativa. Tentando bypass automático...');
|
||||||
|
const result = await bypassLogin();
|
||||||
|
if (!result.success) {
|
||||||
setAuthState({
|
setAuthState({
|
||||||
user: null,
|
user: null,
|
||||||
session: null,
|
session: null,
|
||||||
loading: false,
|
loading: false,
|
||||||
error: null
|
error: null
|
||||||
});
|
});
|
||||||
console.log('⚠️ useAuth: Nenhuma sessão ativa');
|
}
|
||||||
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);
|
||||||
|
|||||||
Reference in New Issue
Block a user