Authentification
Cette API permet à un usager de créer un compte, de s’authentifier et de gérer son accès à la plateforme Connect My Zone.
Création d’un usager (Inscription)
Cette API permet à un usager de créer un nouveau compte sur la plateforme Connect My Zone.
Endpoint : POST /store
Authentification : Aucune
Headers requis :
Accept: application/json
Content-Type: application/json
Paramètres :
| Champ | Type | Requis | Description |
|---|---|---|---|
first_name | string | Oui | Prénom de l'utilisateur |
last_name | string | Oui | Nom de l'utilisateur |
email | string | Oui | Adresse email |
phone | string | Oui | Numéro de téléphone |
password | string | Oui | Mot de passe |
photo | file | Non | Photo de profil (image) |
acceptPrivacyPolicy | boolean | Oui | Acceptation de la politique de confidentialité |
Notes :
- Le numéro de téléphone doit être unique
- L’adresse email doit être unique si elle est fournie
- Le compte est créé avec le statut PENDING
- Un OTP est automatiquement généré
- Le token d’accès est retourné immédiatement après l’inscription
Requête :
curl -X POST https://api-services.mazone-test.ansut.ci/auth/v1.0/users/store \
-H "Accept: application/json" \
-F "first_name=John" \
-F "last_name=Doe" \
-F "email=john.doe@example.com" \
-F "phone=0700000000" \
-F "password=password123" \
-F "acceptPrivacyPolicy=true" \
-F "photo=@/chemin/photo.jpg"
- Succès - Utilisateur créé (200)
Le code OTP est valide, l'utilisateur est authentifié et reçoit son token d'accès.
{
"error": false,
"message": "Successfully",
"data": {
"user": {
"id": "019e0224-fdda-7074-b959-1851680bcad0",
"last_name": "Abdallah",
"first_name": "Diarra",
"email": "utilisateur@exemple.com",
"phone": "0544411389",
"email_verified_at": "2026-05-07 11:23:33",
"profile": "utilisateur-standard",
"status": "active",
"photo": null
},
"token": {
"value": "33|eal7VIlccnooIKTC9kgmBimAfKYuzIgQP9qyOuHhccd8fb23",
"expiresAt": null
}
}
}
Erreur - Email déjà utilisé (400)
{
"error": true,
"statusCode": 400,
"message": "Un utilisateur avec cet email existe déjà."
}
Erreur - Téléphone déjà utilisé (400)
{
"error": true,
"statusCode": 400,
"message": "Un utilisateur avec ce téléphone existe déjà."
}
Erreur - Profil utilisateur introuvable (400)
{
"error": true,
"statusCode": 400,
"message": "Le profil utilisateur est introuvable."
}
Informations tracées dans les logs
- Adresse IP
- User-Agent
- Email utilisé
- Téléphone utilisé
- Nom complet utilisé
- Action (SIGN_UP)
Notes importantes
- Le code OTP généré expire après 24 heures
- Le statut initial du compte est PENDING
- Le type d’authentification utilisé est PHONE_NUMBER
- La photo de profil est facultative
- Le token d’accès est généré automatiquement après inscription
Login
Authentification d'un utilisateur avec son email ou son numéro de téléphone et son mot de passe.
Endpoint : POST /login
Authentification : Aucune
Headers requis :
Accept: application/json
Paramètres :
| Champ | Type | Requis | Description |
|---|---|---|---|
email | string | Non* | Adresse email de l'utilisateur |
phone | string | Non* | Numéro de téléphone de l'utilisateur |
password | string | Oui | Mot de passe de l'utilisateur |
channel | string | Non | Canal d'origine (mobile pour l'app mobile) |
Notes :
- Vous devez fournir email ou phone (pas les deux)
Requête avec email:
curl -X POST https://api-services.mazone-test.ansut.ci/auth/v1.0/users/login \
-H "Accept: application/json" \
-F "email=utilisateur@exemple.com" \
-F "password=monMotDePasse123"
Requête avec téléphone :
curl -X POST https://api-services.mazone-test.ansut.ci/auth/v1.0/users/login \
-H "Accept: application/json" \
-F "phone=0102030405" \
-F "password=monMotDePasse123"
Requête avec canal mobile :
curl -X POST https://api-services.mazone-test.ansut.ci/auth/v1.0/users/login \
-H "Accept: application/json" \
-F "email=utilisateur@exemple.com" \
-F "password=monMotDePasse123" \
-F "channel=mobile"
- Succès - Compte actif sans 2FA (200)
L'utilisateur est authentifié et reçoit son token d'accès.
{
"error": false,
"message": "Successfully",
"data": {
"user": {
"id": "019e0224-fdda-7074-b959-1851680bcad0",
"last_name": "Abdallah",
"first_name": "Diarra",
"email": "utilisateur@exemple.com",
"phone": "0544411389",
"email_verified_at": "2026-05-07 11:23:33",
"profile": "utilisateur-standard",
"status": "active",
"photo": null
},
"token": {
"value": "33|eal7VIlccnooIKTC9kgmBimAfKYuzIgQP9qyOuHhccd8fb23",
"expiresAt": null
}
}
}
- Succès - Compte en attente (pending) ou 2FA activé (200)
Un code OTP à 4 chiffres est envoyé par email à l'utilisateur (valable 5 minutes). La réponse contient uniquement l'email.
"utilisateur@exemple.com"
- Erreur - Identifiants incorrects par email (400)
{
"error": true,
"statusCode": 400,
"message": "Email ou mot de passe incorrect"
}
- Erreur - Identifiants incorrects par téléphone (400)
{
"error": true,
"statusCode": 400,
"message": "Numéro de téléphone ou mot de passe incorrect"
}
- Erreur - Compte temporairement bloqué (400)
{
"error": true,
"statusCode": 400,
"message": "Votre compte est temporairement bloqué. Veuillez réessayer dans X minutes."
}
Après 3 tentatives de connexion échouées consécutives.
Règles de sécurité
| Règle | Valeur |
|---|---|
| Tentatives maximales avant blocage | 3 échecs consécutifs |
| Durée du blocage | Configurable (ex: 3 minutes) |
| Durée de validité de l'OTP | 5 minutes |
Informations tracées dans les logs :
-
Adresse IP
-
User-Agent
-
Type d'action (tentative, succès, échec, blocage)
Notes importantes
-
Le champ channel=mobile est à utiliser uniquement pour l'application mobile
-
Les comptes avec statut pending ou avec 2FA activée nécessitent une validation OTP
-
Chaque tentative échouée incrémente le compteur interne attempts
-
Après déblocage, le compteur de tentatives est réinitialisé
Envoi d'OTP par email
Cette API permet d'envoyer un code OTP (One-Time Password) à 4 chiffres par email à un utilisateur. Le code est valable 5 minutes.
Endpoint : POST /send-otp
Authentification : Aucune
Headers requis :
Accept: application/json
Content-Type: application/json
Paramètres :
| Champ | Type | Requis | Description |
|---|---|---|---|
email | string | Oui | Adresse email du compte utilisateur |
channel | string | Non | Canal d'origine (mobile pour l'app mobile) |
Requête standard :
curl -X POST https://api-services.mazone-test.ansut.ci/auth/v1.0/users/send-otp \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"email": "utilisateur@exemple.com"
}'
Requête avec canal mobile :
curl -X POST https://api-services.mazone-test.ansut.ci/auth/v1.0/users/send-otp \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"email": "utilisateur@exemple.com",
"channel": "mobile"
}'
Réponses
- Succès (200)
Un code OTP à 4 chiffres a été envoyé par email. La réponse contient l'email de l'utilisateur.
{
"error": false,
"statusCode": 200,
"message": "utilisateur@exemple.com"
}
- Erreur - Utilisateur non trouvé (400)
{
"error": true,
"statusCode": 400,
"message": "Utilisateur non trouvé."
}
- Erreur - Trop de requêtes / Rate limiting (429)
Un délai d'attente est imposé entre deux envois d'OTP pour éviter les abus.
{
"error": true,
"statusCode": 429,
"message": "Trop de tentatives. Veuillez patienter avant de renvoyer un code."
}
Règles de sécurité
| Règle | Valeur |
|---|---|
| Format de l'OTP | 4 chiffres (1000 à 9999) |
| Durée de validité de l'OTP | 5 minutes |
| Rate limiting | Oui (délai entre deux envois) |
| Clé de cache rate limiting | otp:send:email |
Vérification de numéro de téléphone
Cette API permet de vérifier un numéro de téléphone et d'envoyer un code OTP (One-Time Password) à 4 chiffres par SMS. Le code est valable 5 minutes.
Endpoint : POST /verify-phone
Authentification : Aucune
Headers requis :
Accept: application/json
Content-Type: application/json
Paramètres :
| Champ | Type | Requis | Description |
|---|---|---|---|
phone | string | Oui | Numéro de téléphone à vérifier |
Requête standard :
curl -X POST https://api-services.mazone-test.ansut.ci/auth/v1.0/users/verify-phone \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"phone": "0102030405"
}'
Réponses
- Succès (200)
Un code OTP à 4 chiffres a été envoyé par email. La réponse contient l'email de l'utilisateur.
{
"error": false,
"statusCode": 200,
"message": "ok"
}
- Succès - Numéro déjà existant (200)
{
"error": false,
"statusCode": 200,
"message": "EXISTE"
}
- Erreur - Trop de requêtes / Rate limiting (429)
Un délai d'attente est imposé entre deux envois d'OTP pour éviter les abus.
{
"error": true,
"statusCode": 429,
"message": "Trop de tentatives. Veuillez patienter avant de renvoyer un code."
}
Validation d'OTP par téléphone
Cette API permet de valider un code OTP envoyé par SMS pour confirmer un numéro de téléphone.
Endpoint : POST /validate-otp-phone
Authentification : Aucune
Headers requis :
Accept: application/json
Content-Type: application/json
Paramètres :
| Champ | Type | Requis | Description |
|---|---|---|---|
phone | string | Oui | Numéro de téléphone |
otp | string | Oui | Code OTP à 4 chiffres reçu par SMS |
Requête :
curl -X POST https://api-services.mazone-test.ansut.ci/auth/v1.0/users/validate-otp-phone \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"phone": "0102030405",
"otp": "1234"
}'
Réponses
- Succès (200)
Le code OTP est valide et a été supprimé.
{
"error": false,
"statusCode": 200,
"message": "true"
}
- Erreur - Aucun code OTP trouvé (400)
{
"error": true,
"statusCode": 400,
"message": "Aucun code OTP trouvé pour ce numéro de téléphone."
}
- Erreur - Code OTP incorrect (400)
{
"error": true,
"statusCode": 400,
"message": "Code OTP incorrect pour ce numéro."
}
- Erreur - Code OTP expiré (400)
{
"error": true,
"statusCode": 400,
"message": "Code OTP expiré."
}
Comportement détaillé
Validation : Le numéro de téléphone est validé et parsé
Recherche OTP : Recherche d'un enregistrement OTP non validé pour ce numéro dans la table otp_codes
Vérification existence : Si aucun enregistrement trouvé → erreur
Vérification code : Si le code OTP ne correspond pas → erreur
Vérification expiration : Si l'OTP a expiré (plus de 5 minutes) → erreur
Suppression : L'enregistrement OTP est supprimé définitivement
Réponse : Retourne true
Validation d'OTP par email (connexion)
Cette API permet de valider un code OTP reçu par email pour finaliser l'authentification d'un utilisateur avec un compte en statut pending ou avec 2FA activée.
Endpoint : POST /validate-otp
Authentification : Aucune
Headers requis :
Accept: application/json
Content-Type: application/json
Paramètres :
| Champ | Type | Requis | Description |
|---|---|---|---|
email | string | Oui | Adresse email de l'utilisateur |
otp | string | Oui | Code OTP à 4 chiffres reçu par email |
Requête :
curl -X POST https://api-services.mazone-test.ansut.ci/auth/v1.0/users/validate-otp \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"email": "utilisateur@exemple.com",
"otp": "1234"
}'
Réponses
- Succès - Authentification complète (200)
Le code OTP est valide, l'utilisateur est authentifié et reçoit son token d'accès.
{
"error": false,
"message": "Successfully",
"data": {
"user": {
"id": "019e0224-fdda-7074-b959-1851680bcad0",
"last_name": "Abdallah",
"first_name": "Diarra",
"email": "utilisateur@exemple.com",
"phone": "0544411389",
"email_verified_at": "2026-05-07 11:23:33",
"profile": "utilisateur-standard",
"status": "active",
"photo": null
},
"token": {
"value": "33|eal7VIlccnooIKTC9kgmBimAfKYuzIgQP9qyOuHhccd8fb23",
"expiresAt": null
}
}
}
- Erreur - Utilisateur non trouvé (400)
{
"error": true,
"statusCode": 400,
"message": "Utilisateur non trouvé."
}
- Erreur - Code OTP incorrect (400)
{
"error": true,
"statusCode": 400,
"message": "Code OTP incorrect"
}
- Erreur - Code OTP expiré (400)
{
"error": true,
"statusCode": 400,
"message": "Code OTP expiré"
}
Comportement détaillé
Validation : L'email est validé et parsé
Recherche utilisateur : L'utilisateur est recherché par son email
Vérification existence : Si l'utilisateur n'existe pas → erreur
Vérification code OTP : Si le code ne correspond pas → erreur
Vérification expiration : Si l'OTP a expiré (plus de 5 minutes) → erreur
Nettoyage OTP : Suppression de l'OTP et de sa date d'expiration
Activation du compte :
Statut passe à active
email_verified_at est défini (si non déjà fait)
Déblocage : Le compte est débloqué si nécessaire
Génération token : Création d'un token d'authentification
Log : Enregistrement de la connexion dans les logs
Réponse : Retourne les informations utilisateur et le token
Social Login
Authentification d’un utilisateur via un provider OAuth (google ou facebook).
Cette API permet :
- de rediriger l’utilisateur vers Google ou Facebook
- de créer automatiquement un compte si l’utilisateur n’existe pas
- de connecter un utilisateur existant
- de générer automatiquement un token d’accès
- de rediriger le frontend ou l’application mobile avec les informations utilisateur
Redirect vers le provider
Endpoint : GET /auth/{provider}/redirect
Authentification : Aucune
Headers requis :
Providers supportés :
Headers requis : Accept: application/json
Paramètres :
| Champ | Type | Requis | Description |
|---|---|---|---|
provider | string | Oui | Provider OAuth (google ou facebook) |
channel | string | Non | Canal d’origine (mobile pour application mobile) |
Requête Google
curl -X GET "https://api-services.mazone-test.ansut.ci/auth/v1.0/users/google/redirect" \
-H "Accept: application/json"
Requête Facebook
curl -X GET "https://api-services.mazone-test.ansut.ci/auth/v1.0/users/facebook/redirect" \
-H "Accept: application/json"
Requête Mobile
curl -X GET "https://api-services.mazone-test.ansut.ci/auth/v1.0/users/google/redirect?channel=mobile" \
-H "Accept: application/json"
Callback Provider
Endpoint appelé automatiquement après authentification Google ou Facebook.
Endpoint : GET /{provider}/callback
Authentification : Aucune
Fonctionnement
Lors du callback :
- les informations utilisateur sont récupérées depuis le provider
- un compte utilisateur est créé automatiquement si nécessaire
- le compte est connecté automatiquement
- un token API est généré
- l’utilisateur est redirigé vers le frontend ou l’application mobile
- Création automatique du compte
Si l’utilisateur n’existe pas :
- un compte est créé automatiquement
- le statut initial est INACTIVE
- l’email est automatiquement vérifié
- une photo de profil est récupérée depuis le provider
- un mot de passe aléatoire est généré
Payload retourné
Le paramètre data contient une réponse encodée en Base64.
{
"user": {
"id": "019e0224-fdda-7074-b959-1851680bcad0",
"last_name": "Doe",
"first_name": "John",
"email": "john.doe@example.com",
"phone": null,
"email_verified_at": "2026-05-10 12:00:00",
"profile": "utilisateur-standard",
"status": "INACTIVE",
"photo": "https://lh3.googleusercontent.com/avatar.jpg",
"auth_type": "GOOGLE"
},
"token": {
"value": "33|eal7VIlccnooIKTC9kgmBimAfKYuzIgQP9qyOuHhccd8fb23",
"expiresAt": null
}
}
Erreur - Email manquant depuis le provider (400)
{
"error": true,
"statusCode": 400,
"message": "Email manquant depuis le provider."
}
Erreur - Profil utilisateur introuvable (400)
{
"error": true,
"statusCode": 400,
"message": "Le profil utilisateur est introuvable."
}
Informations tracées dans les logs
- Adresse IP
- User-Agent
- Email utilisé
- Téléphone utilisé
- Nom complet utilisé
- Action (LOGIN)
Notes importantes
- Les providers supportés sont google et facebook
- L’authentification utilise OAuth2 via Laravel Socialite
- Les comptes créés automatiquement ont le statut INACTIVE
- L’email utilisateur est automatiquement vérifié
- Le token API est généré automatiquement après connexion
- Le paramètre channel=mobile doit être utilisé pour les applications mobiles
- Le payload retourné dans l’URL est encodé en Base64
Déconnexion
Cette API permet à un utilisateur de se déconnecter en révoquant son token d'authentification actuel.
Endpoint : PUT /logout
Authentification : Bearer Token
Headers requis : Accept: application/json
Requête :
curl -X PUT https://api-services.mazone-test.ansut.ci/auth/v1.0/users/logout \
-H "Authorization: Bearer 33|eal7VIlccnooIKTC9kgmBimAfKYuzIgQP9qyOuHhccd8fb23" \
-H "Accept: application/json"
Réponse succès (200) :
{
"error": false,
"message": "Déconnexion réussie."
}