Enterprise User Authentication
POST/company/auth/login
Endpoint pour authentifier les utilisateurs administratifs des entreprises enregistrées.
Effectue les opérations suivantes :
- Valide le format de l’email et du mot de passe
- Recherche l’utilisateur dans la base de données (dans
company_userpuistrucker_useren secours) - Vérifie le mot de passe avec le hachage stocké
- Contrôle l’état du compte (actif/bloqué)
- Enregistre la dernière IP et la date d’accès
- Génère un token JWT avec les claims de l’utilisateur
- Enregistre l’accès dans l’historique
- Vérifie/crée le compte Stripe s’il n’existe pas
- Récupère l’état de l’abonnement
Flux détaillé :
- Le client envoie l’email et le mot de passe au format JSON
- Le serveur valide les champs obligatoires (400 si manquants)
- Recherche l’utilisateur par email (400 s’il n’existe pas)
- Vérifie le mot de passe avec bcrypt (400 en cas d’incohérence)
- Contrôle l’état du compte (401 si inactif/bloqué)
- Met à jour les dernières données d’accès (IP, date)
- Génère un token JWT avec les données de l’utilisateur et de l’entreprise
- Vérifie/crée le compte Stripe s’il n’existe pas
- Récupère l’état de l’abonnement de l’utilisateur
- 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>