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

7.2 KiB
Raw Permalink Blame History

🔗 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 ı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 ıklama Redirect
/dashboard Dashboard /auth/login
/profile Kullanıcı profili /auth/login

API Routes

Route ı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_URL production URL'e güncellendi
  • Email template'ler test edildi
  • Aktivasyon linki çalışıyor
  • Password reset linki çalışıyor

🔍 Debugging

  1. URL formatını kontrol edin:

    # ✅ Doğru:
    /activate/Ng/d1aceh-398e275f6a6fa4b1de05846e9f2903aa
    
    # ❌ Yanlış:
    /activate?uid=Ng&token=d1aceh-398e275f6a6fa4b1de05846e9f2903aa
    
  2. 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]/
    
  3. Browser console'da hata var mı bakın

  4. 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