API — Kimlik Doğrulama
Uç noktalar
| Endpoint | Metot | Kaynak dosya |
|---|---|---|
/login |
POST | dashboard/src/services/authService.tsx (loginRequest) |
/iqv_platform_log |
POST | dashboard/src/services/auditService.tsx (logPlatformStep) |
POST /login
- İstek gövdesi:
{ username, password }. - Kullanım amacı: Kullanıcı adı/parola doğrulaması ve JWT token alma.
- Yanıt: Başarılıysa
tokenve (varsa)useralanları döner; bunlar Reduxadminslice'ına velocalStorage'a yazılır. - Özel davranış: Bu uç nokta, merkezi Axios istemcisinin
Authorizationbaşlığı eklemesinden ve401/403durumunda tetiklenen otomatik-çıkış mantığından muaf tutulur — bir giriş hatası, oturum sonlanması olarak değil, kimlik bilgisi hatası olarak ele alınır.
POST /iqv_platform_log
- İstek gövdesi: Yalnızca
action: 'auth.login'(token kaydedildikten hemen sonra) veyaaction: 'auth.logout'(token temizlenmeden hemen önce) değerleriyle gönderilir; başka biractiondeğeri hiç istek göndermez. - Kullanım amacı: Giriş/çıkış olaylarını backend'deki merkezi denetim (audit) günlüğüne kaydetmek.
- Özel davranış: 4 saniyelik zaman aşımıyla, "fire-and-forget" (sonucu beklenmeyen, hatası kullanıcıya hiç yansımayan) şekilde çağrılır. İstek gövdesi kullanıcı kimliğine dair alan (
user_id,company_idvb.) içermez — backend, kimliği yalnızcaAuthorizationbaşlığındaki JWT'den çıkarır.
Token doğrulama ve oturum sonlanması
- Merkezi Axios istemcisi (
dashboard/src/utils/http.tsx),/logindışındaki her isteğe otomatik olarakAuthorization: Bearer <token>ekler. - Token sırasıyla şuralardan okunur: Redux
admin.token→localStorage.token→localStorage.auth_tokens(ayrıştırılmış JSON, eski sürüm uyumluluğu için). - Herhangi bir (login dışı) istek
401veya403döndürürse: Reduxlogout()çağrılır, eskilocalStoragealanları (token,user,auth_tokens) temizlenir, kullanıcıya "Oturum süreniz sona erdi." bildirimi gösterilir. Aynı anda başarısız olan birden çok istek için bu işlem yalnızca bir kez tetiklenir (tekrar önleyici bayrak). - Sayfa zorla yenilenmez;
adminstate'inin boşalması,RequireAuthkorumasının bir sonraki render'da kullanıcıyı/login'e yönlendirmesini sağlar.
İstemci tarafı giriş kilidi
Backend'e ait bir uç nokta değildir — tamamen istemci tarafında, dashboard/src/components/hooks/useLoginLockout.tsx içinde, localStorage (iqv_login_attempts, iqv_login_lockout_until) kullanılarak uygulanır: 3 başarısız denemeden sonra 30 saniyelik kilit.