Passa al contenuto principale

Enterprise User Authentication

POST 

/company/auth/login

Endpoint per autenticare utenti amministrativi di aziende registrate. Esegue le seguenti operazioni:

  1. Valida il formato di email e password
  2. Cerca l'utente nel database (sia in company_user che in trucker_user come fallback)
  3. Verifica la password con l'hash memorizzato
  4. Controlla lo stato dell'account (attivo/bloccato)
  5. Registra l'ultimo IP e la data di accesso
  6. Genera un token JWT con le claim dell'utente
  7. Registra l'accesso nella cronologia
  8. Verifica/crea un account Stripe se non esiste
  9. Ottiene lo stato dell'abbonamento

Flusso dettagliato:

  1. Il client invia email e password in formato JSON
  2. Il server valida i campi obbligatori (400 se mancanti)
  3. Cerca l'utente per email (400 se non esiste)
  4. Verifica la password con bcrypt (400 se non corrisponde)
  5. Controlla lo stato dell'account (401 se inattivo/bloccato)
  6. Aggiorna gli ultimi dati di accesso (IP, data)
  7. Genera un token JWT con i dati dell'utente e dell'azienda
  8. Verifica/crea un account Stripe se non esiste
  9. Ottiene lo stato dell'abbonamento dell'utente
  10. 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>