7.1 KiB
7.1 KiB
Copilot Memory - Django Auth System Development
Bu dosya, Django 6.0 projemizde Custom User + Djoser + JWT + Social Auth sisteminin geliştirilme sürecini takip eder.
2025-12-12T21:35:00Z
✅ Değişiklik Özeti: İlk Kurulum - Custom User Model ve Auth Sistemi Temeli
Tamamlanan İşler:
-
Custom User Model Oluşturuldu (
accounts/models.py)CustomUsermodeli: Email tabanlı authentication (username yok)CustomUserManager:create_uservecreate_superusermetodları- Alanlar:
email(unique),first_name,last_name,is_staff,is_active,date_joined USERNAME_FIELD = "email"
-
Admin Panel Konfigürasyonu (
accounts/admin.py)CustomUserAdminsınıfı ile Django admin'de custom user yönetimi- List display, filters, search fields yapılandırıldı
-
Serializers Oluşturuldu (
accounts/serializers.py)CustomUserCreateSerializer: Register için,is_active=Falseset ederCustomUserSerializer: User profil bilgileri içinSocialLoginSerializer: Social auth için provider + access_token
-
Social Auth Pipeline (
accounts/pipeline.py)activate_userfonksiyonu: Social login ile gelen kullanıcıları otomatik aktif eder- Normal register:
is_active=False(email aktivasyon gerekli) - Social register:
is_active=True(direkt aktif)
-
Social Login View (
accounts/views.py)SocialLoginView: Provider token'ı doğrular, user oluşturur/bulur, JWT döner- Desteklenen provider'lar: google-oauth2, github, facebook
- Error handling: AuthForbidden, AuthException, genel hatalar
-
Settings.py Tam Konfigürasyonu (
core/settings.py)AUTH_USER_MODEL = 'accounts.CustomUser'INSTALLED_APPS: rest_framework, rest_framework_simplejwt, djoser, corsheaders, social_django, accounts- REST_FRAMEWORK: JWT authentication, throttling (100/hour anon, 1000/hour user)
- SIMPLE_JWT: 60 min access, 7 days refresh, token rotation, blacklist
- DJOSER: Email activation, custom serializers, password reset
- EMAIL: MailPit (localhost:1025) dev için, production için SMTP placeholder
- CORS: localhost:3000, 5173, 8080 (Nuxt/Next/Vue için)
- SOCIAL_AUTH: Google, GitHub, Facebook backends + custom pipeline
-
Email Templates Oluşturuldu (
templates/email/)activation_email.html/.txt: Hesap aktivasyon emailiconfirmation_email.html/.txt: Aktivasyon başarılı emailipassword_reset_email.html/.txt: Şifre sıfırlama emaili- Modern, responsive HTML tasarım + plain text alternatifi
-
URL Routing (
accounts/urls.py)- Djoser endpoints:
/api/v1/auth/users/(register),/api/v1/auth/users/activation/(activate) - JWT endpoints:
/api/v1/auth/jwt/create/(login),/api/v1/auth/jwt/refresh/ - Social auth:
/api/v1/auth/social/<provider>/ - Python Social Auth URLs:
/api/v1/social/
- Djoser endpoints:
-
Database Migrations
accounts/migrations/0001_initial.py: CustomUser modelsocial_djangomigrations: Social auth tabloları- Tüm migration'lar başarıyla uygulandı (migrate completed)
📁 Değiştirilen/Oluşturulan Dosyalar:
accounts/models.py(yeni)accounts/admin.py(güncellendi)accounts/serializers.py(yeni)accounts/pipeline.py(yeni)accounts/views.py(güncellendi)accounts/urls.py(güncellendi)accounts/migrations/0001_initial.py(oluşturuldu)core/settings.py(kapsamlı güncelleme)templates/email/activation_email.html(yeni)templates/email/activation_email.txt(yeni)templates/email/confirmation_email.html(yeni)templates/email/confirmation_email.txt(yeni)templates/email/password_reset_email.html(yeni)templates/email/password_reset_email.txt(yeni)
🎯 Sistem Özellikleri:
Authentication Akışları:
-
Normal Register (Email/Password):
POST /api/v1/auth/users/ Body: { "email", "password", "re_password", "first_name", "last_name" } → User oluşturulur (is_active=False) → Aktivasyon emaili gönderilir → POST /api/v1/auth/users/activation/ { "uid", "token" } → is_active=True olur → POST /api/v1/auth/jwt/create/ { "email", "password" } → JWT tokens alınır -
Social Login:
POST /api/v1/auth/social/google-oauth2/ Body: { "access_token": "..." } → Provider'dan user bilgisi alınır → User bulunur/oluşturulur (is_active=True) → JWT tokens direkt döner -
Login:
POST /api/v1/auth/jwt/create/ Body: { "email", "password" } → Access + Refresh token döner -
Token Refresh:
POST /api/v1/auth/jwt/refresh/ Body: { "refresh": "..." } → Yeni access token döner
⚙️ Yapılandırma Gereksinimleri:
Environment Variables (Production için):
# Email
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USE_TLS=True
EMAIL_HOST_USER=your-email@gmail.com
EMAIL_HOST_PASSWORD=your-app-password
DEFAULT_FROM_EMAIL=noreply@yourdomain.com
# Social Auth - Google
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY=your-google-client-id
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET=your-google-client-secret
# Social Auth - GitHub
SOCIAL_AUTH_GITHUB_KEY=your-github-client-id
SOCIAL_AUTH_GITHUB_SECRET=your-github-client-secret
# Social Auth - Facebook
SOCIAL_AUTH_FACEBOOK_KEY=your-facebook-app-id
SOCIAL_AUTH_FACEBOOK_SECRET=your-facebook-app-secret
Development Tools:
- MailPit:
localhost:1025(SMTP),localhost:8025(Web UI) - Database: SQLite (db.sqlite3)
📝 Next Steps:
-
Testing (Yüksek Öncelik):
- Unit tests: Register → is_active=False check
- Unit tests: Activation → is_active=True check
- Unit tests: Login → aktif/inaktif user scenarios
- Unit tests: Social login → user creation + JWT response
- Integration tests: Full auth flow
-
Dokümantasyon:
AUTH.mdoluştur: Tüm endpoint'ler, request/response örnekleri- Frontend entegrasyon kılavuzu (Nuxt.js + Next.js)
- Environment variables dokümantasyonu
- Deployment checklist
-
İyileştirmeler:
- Rate limiting test et
- Email template'lerini test et (MailPit ile)
- Social auth provider'ları test et
- Error mesajlarını frontend-friendly hale getir
- Logging ekle (özellikle auth failures için)
-
Güvenlik:
- HTTPS için production settings
- CSRF token stratejisi netleştir
- JWT secret key'i environment variable'a taşı
- Rate limiting değerlerini production için ayarla
-
Opsiyonel Özellikler:
- Email değiştirme flow'u
- 2FA (Two-Factor Authentication)
- Remember me functionality
- Account deletion
- Social account linking (birden fazla provider)
🐛 Bilinen Sorunlar:
- Yok (şu an için)
📚 Referanslar:
- Djoser Docs: https://djoser.readthedocs.io/
- SimpleJWT Docs: https://django-rest-framework-simplejwt.readthedocs.io/
- Python Social Auth: https://python-social-auth.readthedocs.io/
- Django REST Framework: https://www.django-rest-framework.org/