Skip to main content

Autenticación de Usuario Empresarial

POST 

/company/auth/login

Endpoint para autenticar usuarios administrativos de empresas rexistradas.
Realiza as seguintes operacións:

  1. Valida formato de correo electrónico e contrasinal.
  2. Busca usuario na base de datos (tanto en company_user como en trucker_user como fallback).
  3. Verifica contrasinal co hash almacenado.
  4. Comproba estado da conta (activa/bloqueada).
  5. Rexistra última IP e data de acceso.
  6. Xera token JWT cos claims do usuario.
  7. Rexistra acceso no historial.
  8. Verifica/crea conta Stripe se non existe.
  9. Obtén estado da subscrición.

Fluxo detallado:

  1. Cliente envía correo electrónico e contrasinal en formato JSON.
  2. Servidor valida campos obrigatorios (400 se faltan).
  3. Busca usuario por correo electrónico (400 se non existe).
  4. Verifica contrasinal con bcrypt (400 se non coincide).
  5. Comproba estado da conta (401 se está inactiva/bloqueada).
  6. Actualiza últimos datos de acceso (IP, data).
  7. Xera token JWT con datos do usuario e empresa.
  8. Verifica/crea conta Stripe se non existe.
  9. Obtén estado da subscrición do usuario.
  10. Devolve token con datos completos do usuario.

Seguridade:

  • Require HTTPS.
  • Os contrasinais transmítense hasheados.
  • Os tokens teñen expiración configurable.

Exemplo de petición:

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

Exemplo de resposta exitosa:

\{
token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...,
expiresIn: 1712345678901,
_id: 507f1f77bcf86cd799439011,
role: admin

<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":"Correo electrónico do usuario","example":"admin@empresa.com"},"password":{"type":"string","format":"password","description":"Contrasinal do usuario","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":"Autenticación exitosa","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"Token JWT para autenticación","example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."},"expiresIn":{"type":"integer","format":"int64","description":"Carimbo de tempo de expiración do token en milisegundos (época Unix)","example":1712345678901},"_id":{"type":"string","description":"ID do usuario","example":"507f1f77bcf86cd799439011"},"role":{"type":"string","description":"Rol do usuario no sistema","enum":["admin","gestor","dev"],"example":"admin"},"status":{"type":"boolean","description":"Estado da conta do usuario.","example":true},"emailVerified":{"type":"boolean","description":"Indica se o correo electrónico foi verificado","example":true},"refresh_time":{"type":"integer","description":"Tempo de refresco do token en horas","example":3},"name":{"type":"string","description":"Nome do usuario","example":"Juan"},"lastname":{"type":"string","description":"Apelidos do usuario","example":"Pérez García"},"country":{"type":"string","description":"Código do país do usuario","example":"esp"},"accountType":{"type":"string","description":"Tipo de conta","example":"multitennant"},"hasSign":{"type":"boolean","description":"Indica se a conta ten a sinatura dixital configurada","example":true},"hasPaymentMethod":{"type":"boolean","description":"Indica se a conta ten método de pago configurado","example":true},"subscriptionStatus":{"type":"object","description":"Estado da subscrición do usuario","properties":{"hasSubscription":{"type":"boolean","description":"Indica se ten subscrición activa.","example":true},"subscriptionType":{"type":"string","description":"Tipo de subscrición","example":"Basic Plan"}}}},"title":"TokenResponse"}}},"headers":{}},"400":{"description":"Datos faltantes ou credenciais incorrectas","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":"Usuario ou empresa non vá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>