Przejdź do głównej zawartości

API — autoryzacja

API operatora używa opaque bearer tokenów. Token ma wysoką entropię, datę ważności i zapisany w bazie wyłącznie skrót.

Logowanie

curl https://splotweselny.pl/api/v1/auth/login \
-H 'Content-Type: application/json' \
-d '{
"email": "operator@example.com",
"password": "REPLACE_WITH_SECRET",
"device_name": "iPhone coordinator"
}'

Odpowiedź 200:

{
"token": "RAW_TOKEN_SHOWN_ONCE",
"expires_at": "2026-08-29T08:00:00+00:00",
"user": {
"id": "00000000-0000-0000-0000-000000000000",
"email": "operator@example.com",
"display_name": "Operator"
}
}

Nie loguj tokenu i nie zapisuj go w UserDefaults, localStorage ani kodzie źródłowym.

Autoryzowane żądanie

curl https://splotweselny.pl/api/v1/auth/me \
-H 'Authorization: Bearer RAW_TOKEN'

Profil zawiera użytkownika, organizację, rolę i listę obiektów.

Web

Przeglądarka nie wywołuje API tokenem z kodu klienckiego. Akcja logowania Next.js zapisuje token w bezpiecznym cookie HttpOnly; komponenty i akcje serwerowe przekazują go do wewnętrznego API.

iOS

Aplikacja zapisuje token w Keychain. Po odpowiedzi 401 powinna zakończyć sesję albo poprosić o ponowne logowanie, bez nieskończonej pętli ponowień.

Wylogowanie

curl -X POST https://splotweselny.pl/api/v1/auth/logout \
-H 'Authorization: Bearer RAW_TOKEN'

Odpowiedź 204 oznacza usunięcie bieżącego tokenu. Wylogowanie jednego urządzenia nie usuwa innych aktywnych tokenów użytkownika.

Ograniczenie prób

Nieudane próby są śledzone dla zahashowanej pary e-mail + adres klienta. Po przekroczeniu limitu logowanie zwraca 429 przez skonfigurowane okno blokady.