7.2 KiB
7.2 KiB
🔗 Next.js Routes - Email Link Configuration
Bu doküman, Django backend'de email template'lerinde kullanılması gereken Next.js route formatlarını içerir.
📧 Email Template URL Formatları
✅ Aktivasyon Email Linki
Django Backend Email Template:
# Django settings veya email template'de:
FRONTEND_URL = "http://localhost:3000" # Development
# FRONTEND_URL = "https://yourdomain.com" # Production
# Email template'de kullanım:
activation_url = f"{FRONTEND_URL}/activate/{uid}/{token}/"
Next.js Routes (Her ikisi de çalışır):
- ✅
/activate/{uid}/{token}- Django default format (ÖNERİLEN) - ✅
/auth/activate/{uid}/{token}- Next.js convention
Örnek Link:
http://localhost:3000/activate/Ng/d1aceh-398e275f6a6fa4b1de05846e9f2903aa/
✅ Şifre Sıfırlama Email Linki
Django Backend Email Template:
# Email template'de kullanım:
password_reset_url = f"{FRONTEND_URL}/password/reset/confirm/{uid}/{token}/"
Next.js Routes (Her ikisi de çalışır):
- ✅
/password/reset/confirm/{uid}/{token}- Django default format (ÖNERİLEN) - ✅
/auth/password-reset/confirm/{uid}/{token}- Next.js convention
Örnek Link:
http://localhost:3000/password/reset/confirm/Ng/d1aceh-398e275f6a6fa4b1de05846e9f2903aa/
🗺️ Tüm Next.js Rotaları
Public Routes (Giriş Gerektirmez)
| Route | Açıklama | Kullanım |
|---|---|---|
/ |
Ana sayfa | Landing page |
/auth/login |
Login sayfası | Kullanıcı girişi |
/auth/register |
Kayıt sayfası | Yeni kullanıcı kaydı |
/activate/{uid}/{token} |
Email aktivasyonu | Django email linki |
/auth/activate/{uid}/{token} |
Email aktivasyonu (alternatif) | Manuel link |
/auth/resend-activation |
Aktivasyon tekrar gönder | Kullanıcı isteği |
/auth/password-reset |
Şifre sıfırlama talebi | Şifre unutma |
/password/reset/confirm/{uid}/{token} |
Şifre sıfırlama onayı | Django email linki |
/auth/password-reset/confirm/{uid}/{token} |
Şifre sıfırlama onayı (alternatif) | Manuel link |
/auth/error |
Auth hata sayfası | NextAuth error callback |
Protected Routes (Giriş Gerektirir)
| Route | Açıklama | Redirect |
|---|---|---|
/dashboard |
Dashboard | → /auth/login |
/profile |
Kullanıcı profili | → /auth/login |
API Routes
| Route | Açıklama |
|---|---|
/api/auth/[...nextauth] |
NextAuth handler |
/api/auth/signin |
NextAuth login |
/api/auth/signout |
NextAuth logout |
/api/auth/session |
Session info |
/api/auth/callback/{provider} |
OAuth callback |
🔧 Django Email Template Örnekleri
Aktivasyon Email Template
<!-- templates/email/activation_email.html -->
<!DOCTYPE html>
<html>
<head>
<title>Hesabınızı Aktifleştirin</title>
</head>
<body>
<h1>Hoş Geldiniz!</h1>
<p>Hesabınızı aktifleştirmek için aşağıdaki linke tıklayın:</p>
<a href="{{ protocol }}://{{ domain }}/activate/{{ uid }}/{{ token }}/">
Hesabı Aktifleştir
</a>
<p>Veya linki tarayıcınıza kopyalayın:</p>
<p>{{ protocol }}://{{ domain }}/activate/{{ uid }}/{{ token }}/</p>
<p>Bu link 24 saat geçerlidir.</p>
</body>
</html>
Şifre Sıfırlama Email Template
<!-- templates/email/password_reset_email.html -->
<!DOCTYPE html>
<html>
<head>
<title>Şifre Sıfırlama</title>
</head>
<body>
<h1>Şifre Sıfırlama Talebi</h1>
<p>Şifrenizi sıfırlamak için aşağıdaki linke tıklayın:</p>
<a href="{{ protocol }}://{{ domain }}/password/reset/confirm/{{ uid }}/{{ token }}/">
Şifreyi Sıfırla
</a>
<p>Veya linki tarayıcınıza kopyalayın:</p>
<p>{{ protocol }}://{{ domain }}/password/reset/confirm/{{ uid }}/{{ token }}/</p>
<p>Bu link 1 saat geçerlidir.</p>
<p><small>Bu talebi siz yapmadıysanız, bu emaili görmezden gelebilirsiniz.</small></p>
</body>
</html>
⚙️ Django Djoser Konfigürasyonu
# settings.py
DJOSER = {
'PASSWORD_RESET_CONFIRM_URL': 'password/reset/confirm/{uid}/{token}',
'ACTIVATION_URL': 'activate/{uid}/{token}',
'SEND_ACTIVATION_EMAIL': True,
'SEND_CONFIRMATION_EMAIL': False,
'PASSWORD_CHANGED_EMAIL_CONFIRMATION': False,
'USERNAME_CHANGED_EMAIL_CONFIRMATION': False,
'USER_CREATE_PASSWORD_RETYPE': True,
'PASSWORD_RESET_CONFIRM_RETYPE': True,
# Email context
'DOMAIN': 'localhost:3000', # Development
# 'DOMAIN': 'yourdomain.com', # Production
'SITE_NAME': 'Your App Name',
'PROTOCOL': 'http', # Development
# 'PROTOCOL': 'https', # Production
}
🌍 Environment Variables
Development (.env.local)
NEXT_PUBLIC_API_BASE_URL=http://localhost:8000/api/v1
NEXTAUTH_URL=http://localhost:3000
Production
NEXT_PUBLIC_API_BASE_URL=https://api.yourdomain.com/api/v1
NEXTAUTH_URL=https://yourdomain.com
🧪 Test Senaryosu
1. Aktivasyon Linki Test
# Django'dan gönderilen email:
http://localhost:3000/activate/Ng/d1aceh-398e275f6a6fa4b1de05846e9f2903aa/
# ✅ Next.js'te çalışır:
/activate/[uid]/[token]/page.tsx
# ✅ Alternatif de çalışır:
/auth/activate/[uid]/[token]/page.tsx
2. Password Reset Linki Test
# Django'dan gönderilen email:
http://localhost:3000/password/reset/confirm/Ng/d1aceh-398e275f6a6fa4b1de05846e9f2903aa/
# ✅ Next.js'te çalışır:
/password/reset/confirm/[uid]/[token]/page.tsx
# ✅ Alternatif de çalışır:
/auth/password-reset/confirm/[uid]/[token]/page.tsx
📝 Notlar
URL Format Esnekliği
Her iki format da destekleniyor:
- Django Default:
/activate/{uid}/{token}- Email template'lerde kullanım için - Next.js Convention:
/auth/activate/{uid}/{token}- Manuel link paylaşımı için
Trailing Slash
Django varsayılan olarak URL sonuna / ekler. Next.js her iki formatı da kabul eder:
- ✅
/activate/Ng/token/(trailing slash ile) - ✅
/activate/Ng/token(trailing slash olmadan)
Production Checklist
- Django
DJOSER['DOMAIN']production URL'e güncellendi - Django
DJOSER['PROTOCOL']='https' - Next.js
NEXTAUTH_URLproduction URL'e güncellendi - Email template'ler test edildi
- Aktivasyon linki çalışıyor
- Password reset linki çalışıyor
🔍 Debugging
Link 404 Hatası Veriyorsa
-
URL formatını kontrol edin:
# ✅ Doğru: /activate/Ng/d1aceh-398e275f6a6fa4b1de05846e9f2903aa # ❌ Yanlış: /activate?uid=Ng&token=d1aceh-398e275f6a6fa4b1de05846e9f2903aa -
Next.js route'ları kontrol edin:
ls -la app/activate/[uid]/[token]/ ls -la app/auth/activate/[uid]/[token]/ ls -la app/password/reset/confirm/[uid]/[token]/ ls -la app/auth/password-reset/confirm/[uid]/[token]/ -
Browser console'da hata var mı bakın
-
Django email template'i kontrol edin:
# settings.py veya email template ACTIVATION_URL = 'activate/{uid}/{token}' # ✅ Doğru # NOT: 'auth/activate/{uid}/{token}' # ❌ Gerekmiyor (ama çalışır)
Son Güncelleme: 24 Aralık 2025
Version: 1.0.0
Status: ✅ Tested & Working