Full-stack authentication sistemi. Kullanıcı giriş/çıkış işlemlerini takip ediyor, hangi cihazdan giriş yapıldığını, IP adreslerini ve şüpheli aktiviteleri tespit ediyor.
- JWT ile güvenli giriş sistemi (access token 15dk, refresh token 7 gün)
- Şifreleri bcrypt ile hashliyor
- Her işlemi logluyor (hangi cihaz, tarayıcı, IP vs.)
- Yeni IP'den giriş olduğunda uyarı veriyor
- Aynı anda farklı cihazlardan giriş yapılırsa bildiriyor
- Başarısız giriş denemelerini sayıyor
- Risk skoru hesaplıyor (0-100 arası)
- Admin/moderator/user rolleri var
Backend:
- Node.js + Express + TypeScript
- MongoDB (Mongoose)
- JWT authentication
- bcryptjs
- request-ip, ua-parser-js
Frontend:
- Next.js 14
- React 19
- TypeScript
- Tailwind CSS
- Zustand (state)
- Axios
cd backend
npm install
cp .env.example .env
# .env dosyasını düzenle (MongoDB URI ekle)
npm run devBackend http://localhost:5000 da çalışacak.
cd frontend
npm install
npm run devFrontend http://localhost:3000 de açılacak.
Backend klasöründe .env dosyası oluştur:
PORT=5000
MONGO_URI=mongodb+srv://username:password@cluster.mongodb.net/dbname
JWT_SECRET=buraya-uzun-random-string
JWT_REFRESH_SECRET=buraya-baska-uzun-random-stringJWT secret oluşturmak için:
node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"backend/
├── src/
│ ├── controllers/ # Auth, admin, activity işlemleri
│ ├── middlewares/ # JWT doğrulama, rate limit
│ ├── models/ # User ve ActivityLog modelleri
│ ├── routes/ # API route'ları
│ ├── utils/ # Device parsing, güvenlik kontrolleri
│ └── server.ts
frontend/
├── app/
│ ├── login/ # Login sayfası
│ ├── register/ # Kayıt sayfası
│ └── dashboard/ # Ana panel (aktiviteler, cihazlar)
├── lib/api.ts # Axios client
└── store/authStore.ts # Zustand state
Auth:
- POST
/api/auth/register- Kayıt ol - POST
/api/auth/login- Giriş yap - POST
/api/auth/logout- Çıkış - POST
/api/auth/refresh- Token yenile - GET
/api/auth/me- Mevcut kullanıcı
Activity:
- GET
/api/activity/activities- Tüm aktiviteler - GET
/api/activity/devices- Kullanılan cihazlar - GET
/api/activity/sessions- Aktif oturumlar - GET
/api/activity/stats/security- Güvenlik istatistikleri
Admin:
- GET
/api/admin/users- Tüm kullanıcılar - PUT
/api/admin/users/:id/role- Rol değiştir - PUT
/api/admin/users/:id/deactivate- Kullanıcıyı pasifleştir
Sistem login sırasında şunları kontrol ediyor:
- Yeni IP: Son 30 günde bu IP'den giriş var mı?
- Farklı Cihaz: Son 1 saatte başka cihazdan giriş yapılmış mı?
- Başarısız Giriş: 15 dakikada 5'ten fazla yanlış deneme var mı?
- Rate Limit: Çok fazla istek atılıyor mu?
Risk skoru hesaplanıyor:
- Yeni IP: +30
- Çoklu cihaz: +25
- Başarısız girişler: +10-20
- Rate limit: +15
Toplam skor:
- 0-30: Düşük risk
- 31-60: Orta risk
- 61-80: Yüksek risk
- 81+: Kritik
- Kayıt ol (username, email, password)
- Giriş yap
- Dashboard'da aktivitelerini gör
- Hangi cihazlardan giriş yaptığını kontrol et
- Şüpheli bir durum varsa uyarı alırsın
- İstatistik Kartları: Toplam aktivite, başarılı/başarısız giriş sayısı, şüpheli aktivite
- Son Aktiviteler Tablosu: İşlem tipi, cihaz, tarayıcı, IP, tarih
- Cihazlarım: Hangi cihazlardan giriş yapmışsın, son kullanım tarihi
Login yaptığında eğer:
- Yeni bir IP'den giriyorsan → Uyarı gösterir
- 1 saat içinde farklı cihazdan giriş yaptıysan → Bildirir
- Çok fazla başarısız deneme varsa → Uyarır
- Risk skorun yüksekse → Gösterir (LOW/MEDIUM/HIGH/CRITICAL)
- Access token 15 dakika geçerli
- Refresh token 7 gün geçerli
- Access token bittiğinde otomatik yenilenir (axios interceptor)
- Refresh token da bittiyse login sayfasına yönlendirir
- Token'lar localStorage'da tutuluyor
- .env dosyası git'e pushlama (zaten .gitignore'da var)
- Production'da extra güvenlik önlemleri al (HTTPS, helmet.js, vs.)
- Email doğrulama ekle
- 2FA (iki faktörlü doğrulama)
- Session'dan uzaktan çıkış yapma
- Email bildirimleri (şüpheli aktivite için)
- Geo-location tracking
- Trusted device listesi
MIT