name: comercialrs-missing-profile-debug
description: Debug Supabase Auth login sem profile - usuario loga mas nao aparece dados no ComercialRS
ComercialRS - Supabase Auth Login sem Perfil
Symptom
Usuario faz login via Supabase Auth (credenciais corretas), mas o sistema age como se nao tivesse perfil - papel padrao pre_sales, dados filtrados, nenhuma reuniao/kanban aparecendo. Kanban/Cronograma mostram "nenhuma reuniao" mesmo existindo dados no banco.
Root Cause
O Supabase Auth e a tabela profiles sao SEPARADAS. O usuario existe em auth.users mas NAO em public.profiles. Sem perfil, AppDataContext nao consegue identificar userId nem role, caindo no fallback role='pre_sales' e userId=null.
Diagnosis
`sql
-- Verificar se existe profile:
SELECT * FROM profiles WHERE email = 'usuario@email.com';
-- Se retornar 0 linhas -> perfil ausente
-- Verificar auth.users ID (via Dashboard Supabase > Authentication > Users)
`
Fix - Criar o Perfil
`sql
INSERT INTO profiles (id, email, name, role, created_at, updated_at)
VALUES (
'uuid-do-auth-users',
'usuario@email.com',
'Nome Completo',
'admin', -- ou manager, member, pre_sales
now(),
now()
);
`
Prevention
Ao criar novo usuario pelo Dashboard Supabase (Authentication > Users > Create user), SEMPRE criar o profile correspondente em public.profiles com id igual ao auth.users.id e role adequado.
Cenario Avancado: Painel Admin cria conta incompleta
Sintoma
Usuario criado pelo painel Team (InviteMemberDialog) nao consegue fazer login. Erro "email ou senha invalidos". Auth funciona, mas login falha silenciosamente.
Root Cause
O painel admin (Team → Adicionar Corretor / Convidar Corretor) faz apenas supabase.from('team_members').insert(). Nao cria auth.users, profiles, nem user_roles. O usuario existe em team_members mas NAO em auth.users — logo nao tem como fazer login.
Dominio @rochasales.com.br bloqueado: Supabase Auth tem bloqueio de dominio para signup. Tentativas de signup com @rochasales.com.br retornam "email_address_invalid". Isso afeta tanto signup normal quanto o painel admin se ele tentar criar via auth diretamente.
Diagnostico
`sql
-- Verificar team_members (existe?):
SELECT * FROM team_members WHERE email = 'usuario@rochasales.com.br';
-- Verificar auth.users (existe?):
SELECT * FROM auth.users WHERE email = 'usuario@rochasales.com.br';
-- Verificar profiles (existe?):
SELECT * FROM profiles WHERE email = 'usuario@rochasales.com.br';
-- Se team_members existe mas auth.users NAO -> conta incompleta
`
Fix: Edge Function para criar conta completa
Criar supabase/functions/create-broker-account/index.ts — usa service_role_key internamente para criar os 4 registros atomicos:
`typescript
Deno.env.get('SUPABASE_SERVICE_ROLE_KEY') // funciona aqui dentro
// Cria auth.users via supabase.auth.admin.createUser()
// Cria profiles com role
// Cria user_roles com role
// Cria team_members
`
Atualizar InviteMemberDialog.tsx para invocar a Edge Function em vez de fazer insert direto em team_members.
Estrutura completa de uma conta de corretor
1. auth.users — credencial de login (email + senha hash)
2. profiles — id=auth.users.id, role, full_name
3. user_roles — id=auth.users.id, role
4. team_members — id diferente (auto-increment), email, name, phone, role, created_by (ref profile.id)
Password temporaria
Para gerar senha temporaria no InviteMemberDialog:
`typescript
const tempPassword = CR${Date.now()}$${Math.random().toString(36).slice(2, 8)};
`
Deploy da Edge Function
`bash
cd /var/www/comercialrs
supabase functions deploy create-broker-account --project-ref dauftiqcvgaydddoxqhh
`
Verificacao pos-criacao
`bash
curl -s -X POST 'https://dauftiqcvgaydddoxqhh.supabase.co/auth/v1/token?grant_type=password' \
-H 'apikey:
-H 'Content-Type: application/json' \
-d '{"email": "usuario@rochasales.com.br", "password": "senha_temporaria"}'
Retorna {"access_token": ...} se OK
`
Related
- - Supabase Cloud: dauftiqcvgaydddoxqhh
- - Anon key: eyJ_REDACTED
- - PAT: sbp_REDACTED