Files
next-dj/ROUTES.md
Beyhan Oğur e881f38e4e first commit
2026-04-26 22:12:36 +03:00

276 lines
7.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🔗 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:**
```python
# 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:**
```python
# 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
```html
<!-- 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
```html
<!-- 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
```python
# 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)
```env
NEXT_PUBLIC_API_BASE_URL=http://localhost:8000/api/v1
NEXTAUTH_URL=http://localhost:3000
```
### Production
```env
NEXT_PUBLIC_API_BASE_URL=https://api.yourdomain.com/api/v1
NEXTAUTH_URL=https://yourdomain.com
```
---
## 🧪 Test Senaryosu
### 1. Aktivasyon Linki Test
```bash
# 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
```bash
# 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_URL` production URL'e güncellendi
- [ ] Email template'ler test edildi
- [ ] Aktivasyon linki çalışıyor
- [ ] Password reset linki çalışıyor
---
## 🔍 Debugging
### Link 404 Hatası Veriyorsa
1. **URL formatını kontrol edin:**
```bash
# ✅ Doğru:
/activate/Ng/d1aceh-398e275f6a6fa4b1de05846e9f2903aa
# ❌ Yanlış:
/activate?uid=Ng&token=d1aceh-398e275f6a6fa4b1de05846e9f2903aa
```
2. **Next.js route'ları kontrol edin:**
```bash
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]/
```
3. **Browser console'da hata var mı bakın**
4. **Django email template'i kontrol edin:**
```python
# 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