Enterprise User Authentication
POST/company/auth/login
Endpoint per autenticare utenti amministrativi di aziende registrate. Esegue le seguenti operazioni:
- Valida il formato di email e password
- Cerca l'utente nel database (sia in
company_userche intrucker_usercome fallback) - Verifica la password con l'hash memorizzato
- Controlla lo stato dell'account (attivo/bloccato)
- Registra l'ultimo IP e la data di accesso
- Genera un token JWT con le claim dell'utente
- Registra l'accesso nella cronologia
- Verifica/crea un account Stripe se non esiste
- Ottiene lo stato dell'abbonamento
Flusso dettagliato:
- Il client invia email e password in formato JSON
- Il server valida i campi obbligatori (400 se mancanti)
- Cerca l'utente per email (400 se non esiste)
- Verifica la password con bcrypt (400 se non corrisponde)
- Controlla lo stato dell'account (401 se inattivo/bloccato)
- Aggiorna gli ultimi dati di accesso (IP, data)
- Genera un token JWT con i dati dell'utente e dell'azienda
- Verifica/crea un account Stripe se non esiste
- Ottiene lo stato dell'abbonamento dell'utente
- Restituisce il token con i dati completi dell'utente
Sicurezza:
- Richiede HTTPS
- Le password vengono trasmesse in hash
- I token hanno una scadenza configurabile
Esempio di richiesta:
{
email: admin@azienda.com,
password: PasswordSicura123!
}
Esempio di risposta di successo:
\{
token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...,
expiresIn: 1712345678901,
_id
<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":"Email dell'utente","example":"admin@empresa.com"},"password":{"type":"string","format":"password","description":"Password dell'utente","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":"Autenticazione riuscita","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"Token JWT per l'autenticazione","example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."},"expiresIn":{"type":"integer","format":"int64","description":"Timestamp di scadenza del token in millisecondi (Unix epoch)","example":1712345678901},"_id":{"type":"string","description":"ID utente","example":"507f1f77bcf86cd799439011"},"role":{"type":"string","description":"Ruolo dell'utente nel sistema","enum":["admin","gestor","dev"],"example":"admin"},"status":{"type":"boolean","description":"Stato dell'account dell'utente","example":true},"emailVerified":{"type":"boolean","description":"Indica se l'email è stato verificato","example":true},"refresh_time":{"type":"integer","description":"Tempo di aggiornamento del token in ore","example":3},"name":{"type":"string","description":"Nome dell'utente","example":"Juan"},"lastname":{"type":"string","description":"Cognome dell'utente","example":"Pérez García"},"country":{"type":"string","description":"Codice paese dell'utente","example":"esp"},"accountType":{"type":"string","description":"Tipo di conto","example":"multitennant"},"hasSign":{"type":"boolean","description":"Indica se l'account ha la firma digitale configurata","example":true},"hasPaymentMethod":{"type":"boolean","description":"Indica se l'account ha un metodo di pagamento configurato","example":true},"subscriptionStatus":{"type":"object","description":"Stato dell'abbonamento dell'utente","properties":{"hasSubscription":{"type":"boolean","description":"Indica se ha attivato l'abbonamento","example":true},"subscriptionType":{"type":"string","description":"Tipo di abbonamento","example":"Basic Plan"}}}},"title":"TokenResponse"}}},"headers":{}},"400":{"description":"Dati mancanti o credenziali errate","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":"Utente o azienda non valida","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>