Ana içeriğe geç

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 token ve (varsa) user alanları döner; bunlar Redux admin slice'ına ve localStorage'a yazılır.
  • Özel davranış: Bu uç nokta, merkezi Axios istemcisinin Authorization başlığı eklemesinden ve 401/403 durumunda 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) veya action: 'auth.logout' (token temizlenmeden hemen önce) değerleriyle gönderilir; başka bir action değ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_id vb.) içermez — backend, kimliği yalnızca Authorization başlığındaki JWT'den çıkarır.

Token doğrulama ve oturum sonlanması

  • Merkezi Axios istemcisi (dashboard/src/utils/http.tsx), /login dışındaki her isteğe otomatik olarak Authorization: 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 401 veya 403 döndürürse: Redux logout() çağrılır, eski localStorage alanları (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; admin state'inin boşalması, RequireAuth koruması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.