feature/patiente-medical-assignment #45

Merged
JoaoGustavo-dev merged 21 commits from feature/patiente-medical-assignment into develop 2025-10-12 03:57:36 +00:00
3 changed files with 92 additions and 288 deletions
Showing only changes of commit c62883a5cc - Show all commits

View File

@ -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"

View File

@ -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.`
);
}

View File

@ -523,8 +523,8 @@ export async function buscarMedicoPorId(id: string | number): Promise<Medico> {
const res = await fetch(url, { method: "GET", headers: baseHeaders() });
const arr = await parse<Medico[]>(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<Medico> {
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
@ -554,10 +554,10 @@ export async function buscarMedicoPorId(id: string | number): Promise<Medico> {
}
const medico = await res.json();
console.log('Médico encontrado no Mock API:', medico);
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<Medico> {
export async function atualizarMedico(id: string | number, input: MedicoInput): Promise<Medico> {
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<Medico[] | Medico>(res);
const result = Array.isArray(arr) ? arr[0] : (arr as Medico);
console.log('Médico atualizado no Supabase:', result);
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<PatientAssignment[]>(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<CreateUserWithPasswordResponse> {
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!');
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!');
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;
}
}