Sobes.tech
Middle

Ako funguje systém overovania v Django?

sobes.tech AI

Odpoveď od AI

V Django je overovanie založené na pripojenom backendu, ktorý spracováva používateľov, skupiny a oprávnenia.

Hlavné komponenty:

  • Používatelia: Model django.contrib.auth.models.User uchováva informácie o používateľoch (meno, hashované heslo, email atď.).
  • Skupiny: Model django.contrib.auth.models.Group združuje používateľov na zjednodušenie správy oprávnení.
  • Oprávnenia: Model django.contrib.auth.models.Permission určuje, čo je používateľovi povolené robiť (prehliadať, pridávať, upravovať, mazať modely).
  • Backendy na overovanie: Triedy implementujúce metódy na overovanie (authenticate) a autorizáciu (get_user, has_perm, has_module_perms). Predvolene sa používa django.contrib.auth.backends.ModelBackend.

Proces overovania:

  1. Používateľ odošle prihlasovacie údaje (zvyčajne cez formulár).
  2. Django volá metódu authenticate() nakonfigurovaných backendov s odovzdanými údajmi.
  3. Backend hľadá používateľa podľa prihlasovacích údajov.
  4. Ak je používateľ nájdený, backend overí heslo (porovnaním hashov).
  5. V prípade úspešnej kontroly authenticate() vráti objekt používateľa.
  6. Django volá login() (vo view alebo middleware), ktorý nastaví reláciu pre používateľa.

Príklad použitia vo view:

# 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:
            # Spracovanie chyby overovania
            pass
    return render(request, 'login.html')

Hlavné funkcie a dekorátory na kontrolu overovania a oprávnení:

  • @login_required: Dekorátor pre view, ktorý vyžaduje overeného používateľa.
  • @permission_required('app_label.permission_code'): Dekorátor pre view, ktorý vyžaduje špecifické oprávnenie.
  • user.is_authenticated: Kontrola, či je používateľ overený.
  • user.has_perm('app_label.permission_code'): Kontrola, či má používateľ konkrétne oprávnenie.
  • user.has_module_perms('app_label'): Kontrola, či má používateľ oprávnenia na modul v určitej aplikácii.

Nastavenie:

  • AUTHENTICATION_BACKENDS: Zoznam registrovaných backendov. Predvolene: ['django.contrib.auth.backends.ModelBackend'].
  • LOGIN_URL: URL pre presmerovanie neautentifikovaných používateľov pri použití @login_required.
  • LOGIN_REDIRECT_URL: URL pre presmerovanie po úspešnom prihlásení.