Enterprise User Authentication
POST/company/auth/login
Endpoint para autenticar usuários administrativos de empresas registradas. Realiza as seguintes operações:
- Valida formato de email e senha
- Busca usuário no banco de dados (tanto em company_user quanto em trucker_user como fallback)
- Verifica senha com hash armazenado
- Verifica status da conta (ativa/bloqueada)
- Registra último IP e data de acesso
- Gera token JWT com claims do usuário
- Registra acesso no histórico
- Verifica/cria conta Stripe se não existir
- Obtém status da assinatura
Fluxo detalhado:
- Cliente envia email e senha em formato JSON
- Servidor valida campos obrigatórios (400 se faltarem)
- Busca usuário por email (400 se não existir)
- Verifica senha com bcrypt (400 se não coincidir)
- Verifica status da conta (401 se inativa/bloqueada)
- Atualiza últimos dados de acesso (IP, data)
- Gera token JWT com dados do usuário e empresa
- Verifica/cria conta Stripe se não existir
- Obtém status da assinatura do usuário
- 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>