Pular para o conteúdo principal

Enterprise User Authentication

POST 

/company/auth/login

Endpoint para autenticar usuários administrativos de empresas registradas. Realiza as seguintes operações:

  1. Valida formato de email e senha
  2. Busca usuário no banco de dados (tanto em company_user quanto em trucker_user como fallback)
  3. Verifica senha com hash armazenado
  4. Verifica status da conta (ativa/bloqueada)
  5. Registra último IP e data de acesso
  6. Gera token JWT com claims do usuário
  7. Registra acesso no histórico
  8. Verifica/cria conta Stripe se não existir
  9. Obtém status da assinatura

Fluxo detalhado:

  1. Cliente envia email e senha em formato JSON
  2. Servidor valida campos obrigatórios (400 se faltarem)
  3. Busca usuário por email (400 se não existir)
  4. Verifica senha com bcrypt (400 se não coincidir)
  5. Verifica status da conta (401 se inativa/bloqueada)
  6. Atualiza últimos dados de acesso (IP, data)
  7. Gera token JWT com dados do usuário e empresa
  8. Verifica/cria conta Stripe se não existir
  9. Obtém status da assinatura do usuário
  10. Retorna token com dados completos do usuário

Segurança:

  • Requer HTTPS
  • Senhas são transmitidas com hash
  • Tokens têm expiração configurável

Exemplo de requisição:

{
email: admin@empresa.com,
password: SenhaSegura123!
}

Exemplo de resposta bem-sucedida:

\{
token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...,
expiresIn: 1712345678901,
_id: 507f1f77bcf86

<Heading
id={"request"}
as={"h2"}
className={"openapi-tabs__heading"}
children={"Request"}
>
</Heading>

<ParamsDetails
parameters={[]}
>

</ParamsDetails>

<RequestSchema
title={"Body"}
body={{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"E-mail do usuário","example":"admin@empresa.com"},"password":{"type":"string","format":"password","description":"Senha do usuário","example":"Contraseña123!"}},"required":["email","password"],"title":"LoginRequest"},"example":{"email":"companytest@test.com","password":"Test1234"}}},"required":true}}
>

</RequestSchema>

<StatusCodes
id={undefined}
label={undefined}
responses={{"200":{"description":"Autenticação bem-sucedida","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"Token JWT para autenticação","example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."},"expiresIn":{"type":"integer","format":"int64","description":"Timestamp de expiração do token em milissegundos (Unix epoch)","example":1712345678901},"_id":{"type":"string","description":"ID do usuário","example":"507f1f77bcf86cd799439011"},"role":{"type":"string","description":"Função do usuário no sistema","enum":["admin","gestor","dev"],"example":"admin"},"status":{"type":"boolean","description":"Estado da conta do usuário","example":true},"emailVerified":{"type":"boolean","description":"Indica se o email foi verificado","example":true},"refresh_time":{"type":"integer","description":"Tempo de atualização do token em horas","example":3},"name":{"type":"string","description":"Nome do usuário","example":"Juan"},"lastname":{"type":"string","description":"Sobrenomes do usuário","example":"Pérez García"},"country":{"type":"string","description":"Código do país do usuário","example":"esp"},"accountType":{"type":"string","description":"Tipo de conta","example":"multitennant"},"hasSign":{"type":"boolean","description":"Indica se a conta tem assinatura digital configurada","example":true},"hasPaymentMethod":{"type":"boolean","description":"Indica se a conta possui método de pagamento configurado","example":true},"subscriptionStatus":{"type":"object","description":"Status de assinatura do usuário","properties":{"hasSubscription":{"type":"boolean","description":"Indica se tem assinatura ativa","example":true},"subscriptionType":{"type":"string","description":"Tipo de assinatura","example":"Basic Plan"}}}},"title":"TokenResponse"}}},"headers":{}},"400":{"description":"Dados ausentes ou credenciais incorretas","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","example":400},"message":{"type":"string","enum":["FORM_DATA_NOT_VALID","WRONG_CREDENTIALS"],"example":"WRONG_CREDENTIALS"}}}}},"headers":{}},"401":{"description":"Usuário ou empresa inválidos","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","example":401},"message":{"type":"string","enum":["CIA_NOT_FOUND","USER_NOT_ACTIVE","ACCOUNT_BLOCKED"],"example":"USER_NOT_ACTIVE"}}}}},"headers":{}}}}
>

</StatusCodes>