Sobes.tech
Middle
225

Djangoда аутентификация системасы кандай иштейт?

AIден жооп

sobes.tech AI

Django'da doğrulama, kullanıcılar, gruplar ve izinleri işleyen bağlamaya bağlı bir arka uç üzerine kuruludur.

Ana bileşenler:

  • Kullanıcılar: django.contrib.auth.models.User modeli, kullanıcılar hakkında bilgileri tutar (isim, hashlenmiş şifre, e-posta vb.).
  • Gruplar: django.contrib.auth.models.Group modeli, izinleri yönetmeyi kolaylaştırmak için kullanıcıları bir araya getirir.
  • İzinler: django.contrib.auth.models.Permission modeli, kullanıcının ne yapabileceğini belirler (görme, ekleme, düzenleme, modelleri silme).
  • Kimlik Doğrulama Arka Uçları: Kimlik doğrulama (authenticate) ve yetkilendirme (get_user, has_perm, has_module_perms) metodlarını uygulayan sınıflar. Varsayılan olarak django.contrib.auth.backends.ModelBackend kullanılır.

Kimlik doğrulama süreci:

  1. Kullanıcı giriş bilgilerini (genellikle form aracılığıyla) gönderir.
  2. Django, yapılandırılmış arka uçların authenticate() metodunu çağırır ve kimlik bilgilerini iletir.
  3. Arka uç, kullanıcıyı giriş bilgileriyle arar.
  4. Kullanıcı bulunursa, arka uç şifreyi kontrol eder (hashleri karşılaştırarak).
  5. Başarılı kontrol durumunda, authenticate() kullanıcı nesnesini döner.
  6. Django, login() fonksiyonunu çağırır (görünüm veya ara katman), bu da kullanıcının oturumunu ayarlar.

Görünümde kullanım örneği:

# views.py
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect

def login_view(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(request, username=username, password=password)

        if user is not None:
            login(request, user)
            return redirect('some_success_page')
        else:
            # Kimlik doğrulama hatası işleme
            pass
    return render(request, 'login.html')

Kimlik doğrulama ve izinleri kontrol etmek için temel fonksiyonlar ve dekoratörler:

  • @login_required: Kullanıcı doğrulaması gerektiren görünüm dekoratörü.
  • @permission_required('app_label.permission_code'): Belirli bir izne ihtiyaç duyan görünüm dekoratörü.
  • user.is_authenticated: Kullanıcının doğrulanıp doğrulanmadığını kontrol eder.
  • user.has_perm('app_label.permission_code'): Kullanıcının belirli bir izne sahip olup olmadığını kontrol eder.
  • user.has_module_perms('app_label'): Kullanıcının belirli bir uygulamadaki modüle izinleri olup olmadığını kontrol eder.

Ayarlar:

  • AUTHENTICATION_BACKENDS: Kayıtlı arka uçların listesi. Varsayılan: ['django.contrib.auth.backends.ModelBackend'].
  • LOGIN_URL: @login_required kullanıldığında giriş yapmamış kullanıcılar için yönlendirme URL'si.
  • LOGIN_REDIRECT_URL: Başarılı giriş sonrası yönlendirme URL'si.