Zum Hauptinhalt springen

Authentifizierung

Base path: /api/auth

POST /auth/login

Mit E-Mail und Passwort anmelden.

Auth: Keine

Request body:

FeldTypPflichtBeschreibung
emailstringJaE-Mail-Adresse
passwordstringJaPasswort
mobilebooleanNeinBei true wird ein 30-Tage-Refresh-Token zurückgegeben

Response (200):

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

Access Tokens laufen nach 8 Stunden ab. Bei mobile: true wird auch ein Refresh Token (30 Tage gültig) zurückgegeben.

Fehler: 401 — Ungültige Anmeldedaten


POST /auth/logout

Abmelden und Refresh-/Device-Token widerrufen.

Auth: Erforderlich (jede Rolle)

Request body:

FeldTypBeschreibung
refresh_tokenstringZu widerrufendes Refresh Token
device_tokenstringZu entfernendes Push-Device-Token

POST /auth/refresh

Access Token über Refresh Token erneuern. Das alte Token wird gelöscht und ein neues ausgestellt (Token-Rotation).

Auth: Keine

Request body:

FeldTypPflicht
refresh_tokenstringJa

Response (200):

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

Fehler: 401 — Ungültiges oder abgelaufenes Refresh Token


POST /auth/register

Neuen Benutzer anlegen (nur Admin). Sendet eine Willkommens-E-Mail mit einem temporären Passwort. Der neue Benutzer hat require_password_change: true.

Auth: Admin

Request body:

FeldTypPflichtStandard
emailstringJa
namestringJa
rolestringNeinstaff

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

Fehler: 409 — E-Mail-Adresse bereits registriert


POST /auth/forgot-password

Passwort-Reset-E-Mail senden. Gibt immer 200 zurück (verhindert E-Mail-Enumeration). Reset-Links laufen nach 1 Stunde ab.

Auth: Keine

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


POST /auth/reset-password

Passwort mit Token aus der Reset-E-Mail zurücksetzen.

Auth: Keine

Request body:

FeldTypPflicht
emailstringJa
tokenstringJa
passwordstring (min 8)Ja

Fehler: 400 — Ungültiges oder abgelaufenes Token


POST /auth/change-password

Passwort für eingeloggten Benutzer ändern.

Auth: Erforderlich (jede Rolle)

Request body:

FeldTypPflicht
emailstringJa
currentPasswordstringJa
newPasswordstring (min 8)Ja
confirmPasswordstring (min 8)Ja

Fehler: 400 — Passwörter stimmen nicht überein; 401 — Aktuelles Passwort falsch


GET /auth/users

Alle Benutzer abrufen (nur Admin).

Auth: Admin

Response: Array von { id, name, email, role } Objekten.


POST /auth/device

Push-Notification-Device-Token registrieren.

Auth: Erforderlich

Request body:

FeldTypPflicht
tokenstring (max 512)Ja
platformios / android / webJa

DELETE /auth/device

Device Token entfernen.

Auth: Erforderlich

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


GET /auth/setup-status

Prüfen ob die Ersteinrichtung erforderlich ist.

Auth: Keine

Response:

{ "needsSetup": true }

POST /auth/setup

Ersteinrichtungs-Endpoint. Funktioniert nur wenn keine Benutzer existieren.

Auth: Keine

Request body:

FeldTypPflichtBeschreibung
admin_namestringJaAdmin-Name
admin_emailstringJaAdmin-E-Mail
admin_passwordstring (min 8)JaPasswort
salon_namestringJaSalonname
salon_emailstringNeinKontakt-E-Mail
salon_phonestringNeinTelefonnummer
salon_addressstringNeinAdresse
opening_hoursarrayNeinArray von { day_of_week, open_time, close_time, is_closed }

Response (201):

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

Fehler: 400 — Einrichtung bereits abgeschlossen