Aller au contenu principal

Authentification

Base path: /api/auth

POST /auth/login

Se connecter avec email et mot de passe.

Auth: Aucune

Request body:

ChampTypeObligatoireDescription
emailstringOuiAdresse email
passwordstringOuiMot de passe
mobilebooleanNonSi true, un refresh token de 30 jours est retourné

Response (200):

{
"token": "jwt-access-token",
"refresh_token": "seulement-si-mobile-true",
"user": {
"id": 1,
"name": "Admin",
"email": "admin@salon.nl",
"role": "admin",
"require_password_change": false
}
}

Les access tokens expirent après 8 heures. Avec mobile: true, un refresh token (valable 30 jours) est également retourné.

Erreurs: 401 — Identifiants invalides


POST /auth/logout

Se déconnecter et révoquer le refresh/device token.

Auth: Requise (tout rôle)

Request body:

ChampTypeDescription
refresh_tokenstringRefresh token à révoquer
device_tokenstringDevice token push à supprimer

POST /auth/refresh

Renouveler l'access token via le refresh token. L'ancien token est supprimé et un nouveau est émis (rotation de tokens).

Auth: Aucune

Request body:

ChampTypeObligatoire
refresh_tokenstringOui

Response (200):

{
"token": "nouveau-access-token",
"refresh_token": "nouveau-refresh-token",
"user": {
"id": 1,
"name": "Admin",
"email": "admin@salon.nl",
"role": "admin",
"require_password_change": false
}
}

Erreurs: 401 — Refresh token invalide ou expiré


POST /auth/register

Créer un nouvel utilisateur (admin uniquement). Envoie un email de bienvenue avec un mot de passe temporaire. Le nouvel utilisateur aura require_password_change: true.

Auth: Admin

Request body:

ChampTypeObligatoireDéfaut
emailstringOui
namestringOui
rolestringNonstaff

Response (200): { id, email, role, name }

Erreurs: 409 — Email déjà enregistré


POST /auth/forgot-password

Envoyer un email de réinitialisation de mot de passe. Retourne toujours 200 (évite l'énumération d'emails). Les liens expirent après 1 heure.

Auth: Aucune

Request body: { "email": "user@example.com" }


POST /auth/reset-password

Réinitialiser le mot de passe avec le token de l'email de réinitialisation.

Auth: Aucune

Request body:

ChampTypeObligatoire
emailstringOui
tokenstringOui
passwordstring (min 8)Oui

Erreurs: 400 — Token invalide ou expiré


POST /auth/change-password

Modifier le mot de passe pour un utilisateur connecté.

Auth: Requise (tout rôle)

Request body:

ChampTypeObligatoire
emailstringOui
currentPasswordstringOui
newPasswordstring (min 8)Oui
confirmPasswordstring (min 8)Oui

Erreurs: 400 — Les mots de passe ne correspondent pas; 401 — Mot de passe actuel incorrect


GET /auth/users

Obtenir tous les utilisateurs (admin uniquement).

Auth: Admin

Response: Tableau d'objets { id, name, email, role }.


POST /auth/device

Enregistrer un device token pour les notifications push.

Auth: Requise

Request body:

ChampTypeObligatoire
tokenstring (max 512)Oui
platformios / android / webOui

DELETE /auth/device

Supprimer un device token.

Auth: Requise

Request body: { "token": "device-token" }


GET /auth/setup-status

Vérifier si la configuration initiale est nécessaire.

Auth: Aucune

Response:

{ "needsSetup": true }

POST /auth/setup

Endpoint de configuration initiale. Fonctionne uniquement quand aucun compte utilisateur n'existe.

Auth: Aucune

Request body:

ChampTypeObligatoireDescription
admin_namestringOuiNom de l'admin
admin_emailstringOuiEmail de l'admin
admin_passwordstring (min 8)OuiMot de passe
salon_namestringOuiNom du salon
salon_emailstringNonEmail de contact
salon_phonestringNonTéléphone
salon_addressstringNonAdresse
opening_hoursarrayNonTableau de { day_of_week, open_time, close_time, is_closed }

Response (201):

{
"token": "jwt-access-token",
"user": { "id": 1, "name": "Admin", "role": "admin" }
}

Erreurs: 400 — Configuration déjà terminée