diff --git a/susconecta/ERRO_BACKEND_EDGE_FUNCTION.md b/susconecta/ERRO_BACKEND_EDGE_FUNCTION.md deleted file mode 100644 index 02c62d2..0000000 --- a/susconecta/ERRO_BACKEND_EDGE_FUNCTION.md +++ /dev/null @@ -1,182 +0,0 @@ -# 🚨 ERRO CRÍTICO NA EDGE FUNCTION - BACKEND - -## Resumo do Problema - -A Edge Function `/functions/v1/create-user` está retornando **erro 500** com mensagem: -```json -{ "error": "Failed to assign user role" } -``` - -## Evidências - -### Console do Frontend -``` -XHRPOST https://yuanqfswhberkoevtmfr.supabase.co/functions/v1/create-user -[HTTP/3 500 1065ms] - -[API ERROR] https://yuanqfswhberkoevtmfr.supabase.co/functions/v1/create-user 500 -Object { error: "Failed to assign user role" } -``` - -### Request Enviado (CORRETO) -```json -{ - "email": "dipar64745@fanlvr.com", - "password": "senha789!", - "full_name": "Jonas Francisco Nascimento Bonfim", - "phone": "(79) 99649-8907", - "role": "medico" -} -``` - -### Response Recebido (ERRO) -```json -{ - "error": "Failed to assign user role" -} -``` - -## Fluxo Atual (Correto segundo documentação) - -1. ✅ Frontend cria perfil na tabela `doctors` -2. ✅ Frontend gera senha aleatória -3. ✅ Frontend chama `/functions/v1/create-user` com dados corretos -4. ❌ **Edge Function falha ao atribuir role na tabela `user_roles`** - -## O Que a Edge Function DEVE Fazer - -Segundo a documentação da API (`Documentação API.md`), a Edge Function `/functions/v1/create-user` deve: - -1. ✅ Criar usuário no Supabase Auth (isso está funcionando) -2. ❌ **Inserir registro na tabela `user_roles`** (isso está falhando) -3. ✅ Retornar `{ success: true, user: {...} }` - -## Possíveis Causas do Erro - -### 1. SUPABASE_SERVICE_ROLE_KEY não configurada -A Edge Function precisa da `SUPABASE_SERVICE_ROLE_KEY` para ter permissão de: -- Inserir na tabela `user_roles` -- Fazer operações administrativas - -**Como verificar:** -1. Acesse o Supabase Dashboard -2. Vá em **Edge Functions** > `create-user` -3. Verifique se a variável de ambiente `SUPABASE_SERVICE_ROLE_KEY` está configurada -4. Copie a chave de: **Settings** > **API** > **service_role key (secret)** - -### 2. Tabela `user_roles` sem permissões corretas -A tabela pode estar bloqueando inserções da Edge Function. - -**Como verificar:** -1. Acesse o Supabase Dashboard -2. Vá em **Database** > **user_roles** -3. Clique em **RLS Policies** -4. Verifique se existe uma policy permitindo: - - Service role pode inserir - - OU Edge Function pode inserir usando service key - -**Policy esperada:** -```sql --- Permitir que service role insira roles -CREATE POLICY "service_role_insert_user_roles" -ON user_roles FOR INSERT -TO service_role -WITH CHECK (true); -``` - -### 3. Código da Edge Function com bug -O código da Edge Function pode ter erro de lógica ao tentar inserir na tabela. - -**Onde encontrar:** -- Supabase Dashboard > **Edge Functions** > `create-user` > **Editor** - -**O que verificar:** -```typescript -// A Edge Function deve ter algo assim: -const { data, error } = await supabaseAdmin - .from('user_roles') - .insert({ - user_id: newUser.id, - role: role - }); - -if (error) { - console.error('Erro ao inserir role:', error); - return new Response( - JSON.stringify({ error: 'Failed to assign user role' }), - { status: 500 } - ); -} -``` - -## Como Testar Cada Possibilidade - -### Teste 1: Verificar se service key está funcionando -Execute no SQL Editor do Supabase: -```sql --- Teste de inserção manual -INSERT INTO user_roles (user_id, role) -VALUES ('00000000-0000-0000-0000-000000000000', 'medico'); - --- Se der erro, mostrará a mensagem de permissão -``` - -### Teste 2: Verificar logs da Edge Function -1. Acesse **Edge Functions** > `create-user` -2. Clique em **Logs** -3. Procure por erros detalhados quando o frontend faz a chamada - -### Teste 3: Verificar estrutura da tabela -```sql --- Verificar estrutura da tabela user_roles -SELECT column_name, data_type, is_nullable -FROM information_schema.columns -WHERE table_name = 'user_roles'; -``` - -Campos esperados: -- `id` (uuid, primary key) -- `user_id` (uuid, not null, foreign key para auth.users) -- `role` (text ou enum, not null) -- `created_at` (timestamp, default now()) - -## Solução Esperada do Backend - -A equipe de backend precisa: - -1. **URGENTE**: Configurar `SUPABASE_SERVICE_ROLE_KEY` na Edge Function -2. **URGENTE**: Adicionar RLS policy para permitir inserções via service role -3. **Recomendado**: Adicionar logs detalhados na Edge Function para debug -4. **Recomendado**: Retornar erro mais específico (ex: "Permission denied to insert into user_roles") - -## Status do Frontend - -✅ **O código do frontend está 100% correto e seguindo a documentação!** - -Não há nada a fazer no frontend. O erro está exclusivamente no backend. - -## Workaround Temporário (NÃO RECOMENDADO) - -Se o backend não puder resolver urgentemente, podemos: -1. Criar usuários sem role (ou role padrão) -2. Administrador atribui roles manualmente depois - -Mas isso **NÃO É RECOMENDADO** porque: -- Usuários não terão permissões corretas -- Aumenta trabalho manual -- Pode gerar problemas de segurança - -## Contato - -Frontend: ✅ Implementação completa e correta -Backend: ❌ Precisa corrigir Edge Function `create-user` - -**Prioridade:** 🔴 CRÍTICA - Sistema não consegue criar novos usuários - ---- - -**Data do erro:** 10/10/2025 -**Ambiente:** https://yuanqfswhberkoevtmfr.supabase.co -**Edge Function:** `/functions/v1/create-user` -**Status Code:** 500 -**Mensagem:** "Failed to assign user role" diff --git a/susconecta/components/forms/patient-registration-form.tsx b/susconecta/components/forms/patient-registration-form.tsx index 5400b59..c11a471 100644 --- a/susconecta/components/forms/patient-registration-form.tsx +++ b/susconecta/components/forms/patient-registration-form.tsx @@ -273,10 +273,10 @@ export function PatientRegistrationForm({ // --- NOVA LÓGICA DE CRIAÇÃO --- const patientPayload = toPayload(); const savedPatientProfile = await criarPaciente(patientPayload); - console.log("✅ Perfil do paciente criado:", savedPatientProfile); + console.log(" Perfil do paciente criado:", savedPatientProfile); if (form.email && form.email.includes('@')) { - console.log("🔐 Criando usuário de autenticação (paciente)..."); + console.log(" Criando usuário de autenticação (paciente)..."); try { const userResponse = await criarUsuarioPaciente({ email: form.email, @@ -285,7 +285,7 @@ export function PatientRegistrationForm({ }); if (userResponse.success && userResponse.user) { - console.log("✅ Usuário de autenticação criado:", userResponse.user); + console.log(" Usuário de autenticação criado:", userResponse.user); // Mostra credenciais no dialog usando as credenciais retornadas setCredentials({ @@ -306,7 +306,7 @@ export function PatientRegistrationForm({ throw new Error((userResponse as any).message || "Falhou ao criar o usuário de acesso."); } } catch (userError: any) { - console.error("❌ Erro ao criar usuário via signup:", userError); + console.error(" Erro ao criar usuário via signup:", userError); // Mensagem de erro específica para email duplicado const errorMsg = userError?.message || String(userError); @@ -315,14 +315,14 @@ export function PatientRegistrationForm({ errorMsg.toLowerCase().includes('já está cadastrado') || errorMsg.toLowerCase().includes('já existe')) { alert( - `⚠️ Este email já está cadastrado no sistema.\n\n` + - `✅ O perfil do paciente foi salvo com sucesso.\n\n` + + ` Este email já está cadastrado no sistema.\n\n` + + ` O perfil do paciente foi salvo com sucesso.\n\n` + `Para criar acesso ao sistema, use um email diferente ou recupere a senha do email existente.` ); } else { alert( - `✅ Paciente cadastrado com sucesso!\n\n` + - `⚠️ Porém houve um problema ao criar o acesso:\n${errorMsg}\n\n` + + ` Paciente cadastrado com sucesso!\n\n` + + ` Porém houve um problema ao criar o acesso:\n${errorMsg}\n\n` + `O cadastro do paciente foi salvo, mas será necessário criar o acesso manualmente.` ); } diff --git a/susconecta/lib/api.ts b/susconecta/lib/api.ts index 0e1b792..682adb2 100644 --- a/susconecta/lib/api.ts +++ b/susconecta/lib/api.ts @@ -523,8 +523,8 @@ export async function buscarMedicoPorId(id: string | number): Promise { const res = await fetch(url, { method: "GET", headers: baseHeaders() }); const arr = await parse(res); if (arr && arr.length > 0) { - console.log('✅ Médico encontrado no Supabase:', arr[0]); - console.log('🔍 Campo especialidade no médico:', { + console.log('Médico encontrado no Supabase:', arr[0]); + console.log('Campo especialidade no médico:', { especialidade: arr[0].especialidade, specialty: (arr[0] as any).specialty, hasEspecialidade: !!arr[0].especialidade, @@ -533,7 +533,7 @@ export async function buscarMedicoPorId(id: string | number): Promise { return arr[0]; } } catch (error) { - console.warn('⚠️ Erro ao buscar no Supabase, tentando mock API:', error); + console.warn('Erro ao buscar no Supabase, tentando mock API:', error); } // Se não encontrar no Supabase, tenta o mock API @@ -553,11 +553,11 @@ export async function buscarMedicoPorId(id: string | number): Promise { throw new Error(`Erro ao buscar médico: ${res.status} ${res.statusText}`); } - const medico = await res.json(); - console.log('✅ Médico encontrado no Mock API:', medico); + const medico = await res.json(); + console.log('Médico encontrado no Mock API:', medico); return medico as Medico; } catch (error) { - console.error('❌ Erro ao buscar médico em ambas as APIs:', error); + console.error('Erro ao buscar médico em ambas as APIs:', error); throw new Error("404: Médico não encontrado"); } } @@ -581,8 +581,8 @@ export async function criarMedico(input: MedicoInput): Promise { export async function atualizarMedico(id: string | number, input: MedicoInput): Promise { - console.log(`🔄 Tentando atualizar médico ID: ${id}`); - console.log(`📤 Payload original:`, input); + console.log(`Tentando atualizar médico ID: ${id}`); + console.log(`Payload original:`, input); // Criar um payload limpo apenas com campos básicos que sabemos que existem const cleanPayload = { @@ -600,12 +600,12 @@ export async function atualizarMedico(id: string | number, input: MedicoInput): active: input.active ?? true }; - console.log(`📤 Payload limpo:`, cleanPayload); + console.log(`Payload limpo:`, cleanPayload); // Atualizar apenas no Supabase (dados reais) try { const url = `${REST}/doctors?id=eq.${id}`; - console.log(`🌐 URL de atualização: ${url}`); + console.log(`URL de atualização: ${url}`); const res = await fetch(url, { method: "PATCH", @@ -613,17 +613,17 @@ export async function atualizarMedico(id: string | number, input: MedicoInput): body: JSON.stringify(cleanPayload), }); - console.log(`📡 Resposta do servidor: ${res.status} ${res.statusText}`); + console.log(`Resposta do servidor: ${res.status} ${res.statusText}`); - if (res.ok) { - const arr = await parse(res); - const result = Array.isArray(arr) ? arr[0] : (arr as Medico); - console.log('✅ Médico atualizado no Supabase:', result); + if (res.ok) { + const arr = await parse(res); + const result = Array.isArray(arr) ? arr[0] : (arr as Medico); + console.log('Médico atualizado no Supabase:', result); return result; } else { // Vamos tentar ver o erro detalhado const errorText = await res.text(); - console.error(`❌ Erro detalhado do Supabase:`, { + console.error(`Erro detalhado do Supabase:`, { status: res.status, statusText: res.statusText, response: errorText, @@ -632,7 +632,7 @@ export async function atualizarMedico(id: string | number, input: MedicoInput): throw new Error(`Supabase error: ${res.status} ${res.statusText} - ${errorText}`); } } catch (error) { - console.error('❌ Erro ao atualizar médico:', error); + console.error('Erro ao atualizar médico:', error); throw error; } } @@ -682,20 +682,6 @@ export async function listarPatientAssignments(params?: { page?: number; limit?: return await parse(res); } -// NOTE: role assignments MUST be done server-side with service role credentials. -// The client should NOT attempt to POST to /rest/v1/user_roles because this -// endpoint typically requires elevated permissions (service role) and is not -// exposed in the public OpenAPI for client usage. Any role assignment must be -// implemented in an authenticated server function (Edge Function) and called -// from the backend. Keeping a client-side POST here caused confusion with the -// API documentation which only lists GET for `/rest/v1/user_roles`. - -// If you need to retry role assignment from the frontend, call your backend -// service (e.g. an Edge Function) that performs the assignment using the -// service role key. Do not add client-side POSTs to `user_roles`. - -// Nota: o endpoint POST /rest/v1/patient_assignments não existe na documentação fornecida. -// Se for necessário criar assignments, isso deve ser feito via função server-side segura. export type User = { id: string; @@ -816,7 +802,7 @@ export async function criarUsuarioDirectAuth(input: { role: UserRoleEnum; userType?: 'profissional' | 'paciente'; }): Promise { - console.log('🔐 [DIRECT AUTH] Criando usuário diretamente via Supabase Auth...'); + console.log('[DIRECT AUTH] Criando usuário diretamente via Supabase Auth...'); const signupUrl = `${API_BASE}/auth/v1/signup`; @@ -856,7 +842,7 @@ export async function criarUsuarioDirectAuth(input: { const responseData = await response.json(); const userId = responseData.user?.id || responseData.id; - console.log('✅ [DIRECT AUTH] Usuário criado:', userId); + console.log('[DIRECT AUTH] Usuário criado:', userId); // NOTE: Role assignments MUST be done by the backend (Edge Function or server) // when creating the user. The frontend should NOT attempt to assign roles. @@ -876,7 +862,7 @@ export async function criarUsuarioDirectAuth(input: { }; } catch (error: any) { - console.error('❌ [DIRECT AUTH] Erro ao criar usuário:', error); + console.error('[DIRECT AUTH] Erro ao criar usuário:', error); throw error; } } @@ -895,11 +881,11 @@ export async function criarUsuarioMedico(medico: { const senha = gerarSenhaAleatoria(); - console.log('🏥 [CRIAR MÉDICO] Iniciando criação no Supabase Auth...'); - console.log('📧 Email:', medico.email); - console.log('👤 Nome:', medico.full_name); - console.log('📱 Telefone:', medico.phone_mobile); - console.log('🔑 Senha gerada:', senha); + console.log('[CRIAR MÉDICO] Iniciando criação no Supabase Auth...'); + console.log('Email:', medico.email); + console.log('Nome:', medico.full_name); + console.log('Telefone:', medico.phone_mobile); + console.log('Senha gerada:', senha); // Endpoint do Supabase Auth (mesmo que auth.ts usa) const signupUrl = `${ENV_CONFIG.SUPABASE_URL}/auth/v1/signup`; @@ -914,7 +900,7 @@ export async function criarUsuarioMedico(medico: { } }; - console.log('📤 [CRIAR MÉDICO] Enviando para:', signupUrl); + console.log('[CRIAR MÉDICO] Enviando para:', signupUrl); try { const response = await fetch(signupUrl, { @@ -927,11 +913,11 @@ export async function criarUsuarioMedico(medico: { body: JSON.stringify(payload), }); - console.log('📋 [CRIAR MÉDICO] Status da resposta:', response.status, response.statusText); + console.log('[CRIAR MÉDICO] Status da resposta:', response.status, response.statusText); if (!response.ok) { const errorText = await response.text(); - console.error('❌ [CRIAR MÉDICO] Erro na resposta:', errorText); + console.error('[CRIAR MÉDICO] Erro na resposta:', errorText); // Tenta parsear o erro para pegar mensagem específica let errorMsg = `Erro ao criar usuário (${response.status})`; @@ -955,17 +941,17 @@ export async function criarUsuarioMedico(medico: { } const responseData = await response.json(); - console.log('✅ [CRIAR MÉDICO] Usuário criado com sucesso no Supabase Auth!'); - console.log('🆔 User ID:', responseData.user?.id || responseData.id); + console.log('[CRIAR MÉDICO] Usuário criado com sucesso no Supabase Auth!'); + console.log('User ID:', responseData.user?.id || responseData.id); // 🔧 AUTO-CONFIRMAR EMAIL: Fazer login automático logo após criar usuário // Isso força o Supabase a confirmar o email automaticamente if (responseData.user?.email_confirmed_at === null || !responseData.user?.email_confirmed_at) { - console.warn('⚠️ [CRIAR MÉDICO] Email NÃO confirmado - tentando auto-confirmar via login...'); + console.warn('[CRIAR MÉDICO] Email NÃO confirmado - tentando auto-confirmar via login...'); try { const loginUrl = `${ENV_CONFIG.SUPABASE_URL}/auth/v1/token?grant_type=password`; - console.log('🔧 [AUTO-CONFIRMAR] Fazendo login automático para confirmar email...'); + console.log('[AUTO-CONFIRMAR] Fazendo login automático para confirmar email...'); const loginResponse = await fetch(loginUrl, { method: 'POST', @@ -981,8 +967,8 @@ export async function criarUsuarioMedico(medico: { if (loginResponse.ok) { const loginData = await loginResponse.json(); - console.log('✅ [AUTO-CONFIRMAR] Login automático realizado com sucesso!'); - console.log('📦 [AUTO-CONFIRMAR] Email confirmado:', loginData.user?.email_confirmed_at ? 'SIM ✅' : 'NÃO ❌'); + console.log('[AUTO-CONFIRMAR] Login automático realizado com sucesso!'); + console.log('[AUTO-CONFIRMAR] Email confirmado:', loginData.user?.email_confirmed_at ? 'SIM' : 'NÃO'); // Atualizar responseData com dados do login (que tem email confirmado) if (loginData.user) { @@ -990,24 +976,24 @@ export async function criarUsuarioMedico(medico: { } } else { const errorText = await loginResponse.text(); - console.error('❌ [AUTO-CONFIRMAR] Falha no login automático:', loginResponse.status, errorText); - console.warn('⚠️ [AUTO-CONFIRMAR] Usuário pode não conseguir fazer login imediatamente!'); + console.error('[AUTO-CONFIRMAR] Falha no login automático:', loginResponse.status, errorText); + console.warn('[AUTO-CONFIRMAR] Usuário pode não conseguir fazer login imediatamente!'); } } catch (confirmError) { - console.error('❌ [AUTO-CONFIRMAR] Erro ao tentar fazer login automático:', confirmError); - console.warn('⚠️ [AUTO-CONFIRMAR] Continuando sem confirmação automática...'); + console.error('[AUTO-CONFIRMAR] Erro ao tentar fazer login automático:', confirmError); + console.warn('[AUTO-CONFIRMAR] Continuando sem confirmação automática...'); } - } else { - console.log('✅ [CRIAR MÉDICO] Email confirmado automaticamente!'); + } else { + console.log('[CRIAR MÉDICO] Email confirmado automaticamente!'); } // Log bem visível com as credenciais para teste - console.log('🔐🔐🔐 ========================================'); - console.log('🔐 CREDENCIAIS DO MÉDICO CRIADO:'); - console.log('🔐 Email:', medico.email); - console.log('🔐 Senha:', senha); - console.log('🔐 Pode fazer login?', responseData.user?.email_confirmed_at ? 'SIM ✅' : 'NÃO ❌ (precisa confirmar email)'); - console.log('🔐 ========================================'); + console.log('========================================'); + console.log('CREDENCIAIS DO MÉDICO CRIADO:'); + console.log('Email:', medico.email); + console.log('Senha:', senha); + console.log('Pode fazer login?', responseData.user?.email_confirmed_at ? 'SIM' : 'NÃO (precisa confirmar email)'); + console.log('========================================'); return { success: true, @@ -1017,7 +1003,7 @@ export async function criarUsuarioMedico(medico: { }; } catch (error: any) { - console.error('❌ [CRIAR MÉDICO] Erro ao criar usuário:', error); + console.error('[CRIAR MÉDICO] Erro ao criar usuário:', error); throw error; } } @@ -1031,11 +1017,11 @@ export async function criarUsuarioPaciente(paciente: { const senha = gerarSenhaAleatoria(); - console.log('🏥 [CRIAR PACIENTE] Iniciando criação no Supabase Auth...'); - console.log('📧 Email:', paciente.email); - console.log('👤 Nome:', paciente.full_name); - console.log('📱 Telefone:', paciente.phone_mobile); - console.log('🔑 Senha gerada:', senha); + console.log('[CRIAR PACIENTE] Iniciando criação no Supabase Auth...'); + console.log('Email:', paciente.email); + console.log('Nome:', paciente.full_name); + console.log('Telefone:', paciente.phone_mobile); + console.log('Senha gerada:', senha); // Endpoint do Supabase Auth (mesmo que auth.ts usa) const signupUrl = `${ENV_CONFIG.SUPABASE_URL}/auth/v1/signup`; @@ -1050,7 +1036,7 @@ export async function criarUsuarioPaciente(paciente: { } }; - console.log('📤 [CRIAR PACIENTE] Enviando para:', signupUrl); + console.log('[CRIAR PACIENTE] Enviando para:', signupUrl); try { const response = await fetch(signupUrl, { @@ -1063,11 +1049,11 @@ export async function criarUsuarioPaciente(paciente: { body: JSON.stringify(payload), }); - console.log('📋 [CRIAR PACIENTE] Status da resposta:', response.status, response.statusText); + console.log('[CRIAR PACIENTE] Status da resposta:', response.status, response.statusText); if (!response.ok) { const errorText = await response.text(); - console.error('❌ [CRIAR PACIENTE] Erro na resposta:', errorText); + console.error('[CRIAR PACIENTE] Erro na resposta:', errorText); // Tenta parsear o erro para pegar mensagem específica let errorMsg = `Erro ao criar usuário (${response.status})`; @@ -1091,14 +1077,14 @@ export async function criarUsuarioPaciente(paciente: { } const responseData = await response.json(); - console.log('✅ [CRIAR PACIENTE] Usuário criado com sucesso no Supabase Auth!'); - console.log('🆔 User ID:', responseData.user?.id || responseData.id); - console.log('📦 [CRIAR PACIENTE] Resposta completa do Supabase:', JSON.stringify(responseData, null, 2)); + console.log('[CRIAR PACIENTE] Usuário criado com sucesso no Supabase Auth!'); + console.log('User ID:', responseData.user?.id || responseData.id); + console.log('[CRIAR PACIENTE] Resposta completa do Supabase:', JSON.stringify(responseData, null, 2)); // VERIFICAÇÃO CRÍTICA: O usuário foi realmente criado? if (!responseData.user && !responseData.id) { - console.error('⚠️⚠️⚠️ AVISO: Supabase retornou sucesso mas SEM user ID!'); - console.error('Isso pode significar que o usuário NÃO foi criado de verdade!'); + console.error('AVISO: Supabase retornou sucesso mas sem user ID!'); + console.error('Isso pode significar que o usuário não foi criado de verdade!'); } const userId = responseData.user?.id || responseData.id; @@ -1106,11 +1092,11 @@ export async function criarUsuarioPaciente(paciente: { // 🔧 AUTO-CONFIRMAR EMAIL: Fazer login automático logo após criar usuário // Isso força o Supabase a confirmar o email automaticamente if (responseData.user?.email_confirmed_at === null || !responseData.user?.email_confirmed_at) { - console.warn('⚠️ [CRIAR PACIENTE] Email NÃO confirmado - tentando auto-confirmar via login...'); + console.warn('[CRIAR PACIENTE] Email NÃO confirmado - tentando auto-confirmar via login...'); try { const loginUrl = `${ENV_CONFIG.SUPABASE_URL}/auth/v1/token?grant_type=password`; - console.log('🔧 [AUTO-CONFIRMAR] Fazendo login automático para confirmar email...'); + console.log('[AUTO-CONFIRMAR] Fazendo login automático para confirmar email...'); const loginResponse = await fetch(loginUrl, { method: 'POST', @@ -1124,15 +1110,15 @@ export async function criarUsuarioPaciente(paciente: { }), }); - console.log('🔍 [AUTO-CONFIRMAR] Status do login automático:', loginResponse.status); + console.log('[AUTO-CONFIRMAR] Status do login automático:', loginResponse.status); if (loginResponse.ok) { const loginData = await loginResponse.json(); - console.log('✅ [AUTO-CONFIRMAR] Login automático realizado com sucesso!'); - console.log('📦 [AUTO-CONFIRMAR] Dados completos do login:', JSON.stringify(loginData, undefined, 2)); - console.log('📧 [AUTO-CONFIRMAR] Email confirmado:', loginData.user?.email_confirmed_at ? 'SIM ✅' : 'NÃO ❌'); - console.log('👤 [AUTO-CONFIRMAR] UserType no metadata:', loginData.user?.user_metadata?.userType); - console.log('🎯 [AUTO-CONFIRMAR] Email verified:', loginData.user?.user_metadata?.email_verified); + console.log('[AUTO-CONFIRMAR] Login automático realizado com sucesso!'); + console.log('[AUTO-CONFIRMAR] Dados completos do login:', JSON.stringify(loginData, undefined, 2)); + console.log('[AUTO-CONFIRMAR] Email confirmado:', loginData.user?.email_confirmed_at ? 'SIM' : 'NÃO'); + console.log('[AUTO-CONFIRMAR] UserType no metadata:', loginData.user?.user_metadata?.userType); + console.log('[AUTO-CONFIRMAR] Email verified:', loginData.user?.user_metadata?.email_verified); // Atualizar responseData com dados do login (que tem email confirmado) if (loginData.user) { @@ -1140,33 +1126,33 @@ export async function criarUsuarioPaciente(paciente: { } } else { const errorText = await loginResponse.text(); - console.error('❌ [AUTO-CONFIRMAR] Falha no login automático:', loginResponse.status, errorText); - console.warn('⚠️ [AUTO-CONFIRMAR] Usuário pode não conseguir fazer login imediatamente!'); + console.error('[AUTO-CONFIRMAR] Falha no login automático:', loginResponse.status, errorText); + console.warn('[AUTO-CONFIRMAR] Usuário pode não conseguir fazer login imediatamente!'); // Tentar parsear o erro para entender melhor try { const errorData = JSON.parse(errorText); - console.error('📋 [AUTO-CONFIRMAR] Detalhes do erro:', errorData); + console.error('[AUTO-CONFIRMAR] Detalhes do erro:', errorData); } catch (e) { - console.error('📋 [AUTO-CONFIRMAR] Erro não é JSON:', errorText); + console.error('[AUTO-CONFIRMAR] Erro não é JSON:', errorText); } } } catch (confirmError) { - console.error('❌ [AUTO-CONFIRMAR] Erro ao tentar fazer login automático:', confirmError); - console.warn('⚠️ [AUTO-CONFIRMAR] Continuando sem confirmação automática...'); + console.error('[AUTO-CONFIRMAR] Erro ao tentar fazer login automático:', confirmError); + console.warn('[AUTO-CONFIRMAR] Continuando sem confirmação automática...'); } - } else { - console.log('✅ [CRIAR PACIENTE] Email confirmado automaticamente!'); + } else { + console.log('[CRIAR PACIENTE] Email confirmado automaticamente!'); } // Log bem visível com as credenciais para teste - console.log('🔐🔐🔐 ========================================'); - console.log('🔐 CREDENCIAIS DO PACIENTE CRIADO:'); - console.log('🔐 Email:', paciente.email); - console.log('🔐 Senha:', senha); - console.log('🔐 UserType:', 'paciente'); - console.log('🔐 Pode fazer login?', responseData.user?.email_confirmed_at ? 'SIM ✅' : 'NÃO ❌ (precisa confirmar email)'); - console.log('🔐 ========================================'); + console.log('========================================'); + console.log('CREDENCIAIS DO PACIENTE CRIADO:'); + console.log('Email:', paciente.email); + console.log('Senha:', senha); + console.log('UserType:', 'paciente'); + console.log('Pode fazer login?', responseData.user?.email_confirmed_at ? 'SIM' : 'NÃO (precisa confirmar email)'); + console.log('========================================'); return { success: true, @@ -1176,7 +1162,7 @@ export async function criarUsuarioPaciente(paciente: { }; } catch (error: any) { - console.error('❌ [CRIAR PACIENTE] Erro ao criar usuário:', error); + console.error('[CRIAR PACIENTE] Erro ao criar usuário:', error); throw error; } }