Autenticación de Usuario Empresarial
POST/company/auth/login
Endpoint para autenticar usuarios administrativos de empresas rexistradas.
Realiza as seguintes operacións:
- Valida formato de correo electrónico e contrasinal.
- Busca usuario na base de datos (tanto en
company_usercomo entrucker_usercomo fallback). - Verifica contrasinal co hash almacenado.
- Comproba estado da conta (activa/bloqueada).
- Rexistra última IP e data de acceso.
- Xera token JWT cos claims do usuario.
- Rexistra acceso no historial.
- Verifica/crea conta Stripe se non existe.
- Obtén estado da subscrición.
Fluxo detallado:
- Cliente envía correo electrónico e contrasinal en formato JSON.
- Servidor valida campos obrigatorios (400 se faltan).
- Busca usuario por correo electrónico (400 se non existe).
- Verifica contrasinal con bcrypt (400 se non coincide).
- Comproba estado da conta (401 se está inactiva/bloqueada).
- Actualiza últimos datos de acceso (IP, data).
- Xera token JWT con datos do usuario e empresa.
- Verifica/crea conta Stripe se non existe.
- Obtén estado da subscrición do usuario.
- 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>