Aller au contenu principal

Enterprise User Authentication

POST 

/company/auth/login

Endpoint pour authentifier les utilisateurs administratifs des entreprises enregistrées.
Effectue les opérations suivantes :

  1. Valide le format de l’email et du mot de passe
  2. Recherche l’utilisateur dans la base de données (dans company_user puis trucker_user en secours)
  3. Vérifie le mot de passe avec le hachage stocké
  4. Contrôle l’état du compte (actif/bloqué)
  5. Enregistre la dernière IP et la date d’accès
  6. Génère un token JWT avec les claims de l’utilisateur
  7. Enregistre l’accès dans l’historique
  8. Vérifie/crée le compte Stripe s’il n’existe pas
  9. Récupère l’état de l’abonnement

Flux détaillé :

  1. Le client envoie l’email et le mot de passe au format JSON
  2. Le serveur valide les champs obligatoires (400 si manquants)
  3. Recherche l’utilisateur par email (400 s’il n’existe pas)
  4. Vérifie le mot de passe avec bcrypt (400 en cas d’incohérence)
  5. Contrôle l’état du compte (401 si inactif/bloqué)
  6. Met à jour les dernières données d’accès (IP, date)
  7. Génère un token JWT avec les données de l’utilisateur et de l’entreprise
  8. Vérifie/crée le compte Stripe s’il n’existe pas
  9. Récupère l’état de l’abonnement de l’utilisateur
  10. Renvoie le token avec les données complètes de l’utilisateur

Sécurité :

  • Requiert HTTPS
  • Les mots de passe sont transmis hachés
  • Les tokens ont une expiration configurable

Exemple de requête :

{
email: admin@entreprise.com,
password: MotDePasseSecurise123!
}

Exemple de réponse réussie :

\{
token: ey

<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 de l'utilisateur","example":"admin@empresa.com"},"password":{"type":"string","format":"password","description":"Mot de passe de l'utilisateur","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":"Authentification réussie","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"Jeton JWT pour l'authentification","example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."},"expiresIn":{"type":"integer","format":"int64","description":"Horodatage d'expiration du jeton en millisecondes (époque Unix)","example":1712345678901},"_id":{"type":"string","description":"ID de l'utilisateur","example":"507f1f77bcf86cd799439011"},"role":{"type":"string","description":"Rôle de l'utilisateur dans le système","enum":["admin","gestor","dev"],"example":"admin"},"status":{"type":"boolean","description":"État du compte de l'utilisateur","example":true},"emailVerified":{"type":"boolean","description":"Indique si l'email a été vérifié","example":true},"refresh_time":{"type":"integer","description":"Temps de rafraîchissement du jeton en heures","example":3},"name":{"type":"string","description":"Nom de l'utilisateur","example":"Juan"},"lastname":{"type":"string","description":"Noms de famille de l'utilisateur","example":"Pérez García"},"country":{"type":"string","description":"Code pays de l'utilisateur","example":"esp"},"accountType":{"type":"string","description":"Type de compte","example":"multitennant"},"hasSign":{"type":"boolean","description":"Indique si le compte dispose d'une signature numérique configurée","example":true},"hasPaymentMethod":{"type":"boolean","description":"Indique si le compte dispose d'une méthode de paiement configurée","example":true},"subscriptionStatus":{"type":"object","description":"Statut d'abonnement de l'utilisateur","properties":{"hasSubscription":{"type":"boolean","description":"Indique s'il a un abonnement actif","example":true},"subscriptionType":{"type":"string","description":"Type d'abonnement","example":"Basic Plan"}}}},"title":"TokenResponse"}}},"headers":{}},"400":{"description":"Données manquantes ou informations d'identification incorrectes","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":"Utilisateur ou entreprise non valide","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>