📄 SKILL.md

← Vault

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