Bu belge, projedeki kimlik doğrulama ve oturum yönetimi sistemini açıklar. Proje, Auth.js (NextAuth v5) kütüphanesini kullanmaktadır.
Kimlik doğrulama sistemi şu bileşenlerden oluşur:
- Konfigürasyon:
auth.config.tsveauth.ts. - Veritabanı Adaptörü: Prisma Adapter kullanılarak kullanıcı verileri
User,Account,Sessiontablolarında tutulur. - Sağlayıcılar (Providers):
- Google: OAuth ile giriş.
- Credentials: Email ve şifre ile giriş.
Kullanıcı giriş formunu yöneten React bileşeni.
- Özellikler:
- Zod ile form validasyonu.
useTransitionile asenkron işlem yönetimi.- Hata durumunda (örn: email doğrulanmamış) kullanıcıya geri bildirim (
ResendAlert). - Google ile giriş butonu entegrasyonu.
Google OAuth akışını başlatan buton.
Auth.js'in ana yapılandırma dosyasıdır.
callbacks: Oturum (session) ve JWT token içine özel verilerin (örn:role,id) eklenmesini sağlar.events: Kullanıcı oluşturma (createUser) gibi olayları dinler (örn: hoşgeldin emaili göndermek için).
Kullanıcı ana tablosu.
emailVerified: Email doğrulama tarihi. Boşsa kullanıcı doğrulanmamıştır.password: Hashlenmiş şifre (sadece Credentials girişi için).
- Şifre Hashing: Kullanıcı şifreleri Argon2 algoritması ile güvenli bir şekilde hashlenir.
- Oturum Yönetimi: JWT veya Veritabanı tabanlı oturumlar desteklenir (varsayılan: Database).
OAuth sağlayıcılarından gelen bağlantı bilgileri (Google Access Token vb.) burada tutulur.
Email doğrulama işlemleri için geçici tokenlar.
- Giriş (Login):
- Kullanıcı form veya Google ile giriş yapar.
- Başarılı ise güvenli bir
sessionTokencookie'si tarayıcıya set edilir.
- Oturum Kontrolü (Session Check):
- Sunucu tarafında:
auth()fonksiyonu ile oturum bilgisi alınır. - İstemci tarafında:
useSessionhook'u kullanılabilir (ancak proje genelde server component ağırlıklı).
- Sunucu tarafında:
- Middleware:
middleware.ts(varsa) veya sayfa bazlı kontrollerle korunması gereken rotalara (örn:/dashboard) erişim engellenir.
- Email Doğrulama: Credentials ile kayıt olan kullanıcıların email adreslerini doğrulaması zorunludur. Doğrulanmamış kullanıcılar giriş yapamaz (
NOT_VERIFIEDhatası döner). - Rol Yönetimi: Kullanıcı rolleri (
ADMIN,TEACHER,STUDENT) veritabanında tutulur ve session nesnesine eklenerek uygulamanın her yerinde erişilebilir hale getirilir.