183 lines
5.1 KiB
Markdown
183 lines
5.1 KiB
Markdown
# 🚨 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"
|