Skip to main content

Visão Geral

A API usa Session Cookie para autenticação — não Bearer Token. O fluxo é:
  1. Frontend chama POST /auth/login com e-mail e senha
  2. O backend valida as credenciais na Firebase Identity Toolkit, cria um session cookie via Firebase Admin SDK e o seta na resposta
  3. Todas as requisições seguintes enviam o cookie automaticamente (browser/fetch com credentials: "include")
  4. O middleware verificarToken valida o cookie em cada requisição usando admin.auth().verifySessionCookie()
O cookie tem nome configurável via SESSION_COOKIE_NAME (padrão: imob_session) e expira em SESSION_EXPIRES_DAYS dias (padrão: 5).

Login

POST /auth/login
Content-Type: application/json

{
  "email": "usuario@email.com",
  "password": "suasenha"
}
Resposta 200
{
  "message": "Login realizado com sucesso.",
  "user": {
    "uid": "uid_do_usuario",
    "email": "usuario@email.com",
    "role": "LOCADOR",
    "tipoPessoa": "PF",
    "nome": "João da Silva"
  }
}
O cookie imob_session é setado automaticamente na resposta com as flags httpOnly, secure e sameSite: none em produção. Erros possíveis:
401 — Credenciais inválidas
{ "error": "E-mail ou senha incorretos." }
403 — Conta desativada
{ "error": "Sua conta está desativada. Entre em contato com o suporte." }

Como fazer requisições autenticadas

No frontend, use credentials: "include" em todas as chamadas para que o browser envie o cookie automaticamente:
const res = await fetch("https://api.patrimonion.com.br/imoveis", {
  credentials: "include",
});
Nenhum header Authorization é necessário — o cookie é enviado automaticamente pelo browser.

Logout

Invalida o cookie e revoga os refresh tokens do Firebase.
POST /auth/logout
Resposta 200
{ "message": "Logout realizado com sucesso." }

Registro

Cria uma conta nova. O primeiro usuário registrado recebe automaticamente o role SUPER_ADMIN. Os demais recebem LOCADOR. Suporta Pessoa Física (PF) e Pessoa Jurídica (PJ).
POST /auth/register
Content-Type: application/json

{
  "email": "novo@email.com",
  "password": "senha123",
  "tipoPessoa": "PF",
  "nomeCompleto": "João da Silva",
  "cpf": "123.456.789-00",
  "telefone": "(11) 99999-0000",
  "cep": "01310-100",
  "rua": "Rua das Flores",
  "numero": "123",
  "bairro": "Centro",
  "cidade": "São Paulo",
  "estado": "SP"
}
Resposta 201
{
  "message": "Conta criada com sucesso. Verifique seu e-mail para ativar a conta.",
  "user": {
    "uid": "uid_gerado",
    "email": "novo@email.com",
    "role": "LOCADOR",
    "nome": "João da Silva"
  }
}
Um e-mail de verificação é enviado via Brevo automaticamente após o registro. A chamada não é bloqueada pelo envio — se falhar, apenas um aviso é logado.

Campos obrigatórios por tipo de pessoa

PF: nomeCompleto, cpf, mais o endereço completo. PJ: razaoSocial, cnpj, nomeResponsavel, mais o endereço completo.

Verificação de e-mail

Reenviar e-mail de verificação

Rate limit interno: 1 envio a cada 2 minutos por usuário.
POST /auth/resend-verification

Confirmar verificação

Chamado pelo frontend após o usuário clicar no link e o Firebase processar. Atualiza emailVerificado: true no Firestore.
POST /auth/confirm-email

Recuperação de senha

Envia o link de redefinição via Brevo. Por segurança, a resposta é sempre 200 independente de o e-mail existir ou não.
POST /auth/forgot-password
Content-Type: application/json

{
  "email": "usuario@email.com"
}
Resposta 200
{
  "message": "Se este e-mail estiver cadastrado, você receberá o link em instantes."
}

Perfil do usuário autenticado

Buscar perfil

GET /auth/perfil

Atualizar perfil

Campos protegidos e ignorados mesmo que enviados: userId, email, role, tipoPessoa, cpf, cnpj, criadoEm, emailVerificado.
PATCH /auth/perfil
Content-Type: application/json

{
  "telefone": "(11) 98765-4321",
  "profissao": "Arquiteto"
}

Erros de autenticação

StatusCausa
401Cookie ausente, inválido ou expirado
403Cookie válido, mas conta desativada ou sem permissão para o recurso
{ "error": "Sessão inválida ou expirada." }
Como a autenticação usa cookie HttpOnly, ela não funciona via ferramentas como Postman ou curl sem configuração adicional. Para testar endpoints autenticados nessas ferramentas, faça o login primeiro e copie o valor do cookie imob_session da resposta.