Sobes.tech
Middle

Hogyan működik a hitelesítési rendszer a Django-ban?

sobes.tech MI

Válasz az MI-től

A Django-ban az autentikáció egy plug-in backendre épül, amely a felhasználókat, csoportokat és engedélyeket kezeli.

Fő komponensek:

  • Felhasználók: A django.contrib.auth.models.User modell tárolja a felhasználókról szóló információkat (név, hash-elt jelszó, email stb.).
  • Csoportok: A django.contrib.auth.models.Group modell csoportosítja a felhasználókat az engedélyek egyszerűbb kezelése érdekében.
  • Engedélyek: A django.contrib.auth.models.Permission modell határozza meg, mit tehet meg egy felhasználó (modellek megtekintése, hozzáadása, módosítása, törlése).
  • Autentikációs backendek: Osztályok, amelyek megvalósítják az autentikáció (authenticate) és az engedélyezés (get_user, has_perm, has_module_perms) módszereit. Alapértelmezés szerint a django.contrib.auth.backends.ModelBackend van használatban.

Autentikációs folyamat:

  1. A felhasználó elküldi a bejelentkezési adatokat (általában űrlapon keresztül).
  2. A Django meghívja a konfigurált backendek authenticate() metódusát, átadva az adatokat.
  3. A backend megkeresi a felhasználót a bejelentkezési név alapján.
  4. Ha megtalálja a felhasználót, ellenőrzi a jelszót (hash-ek összehasonlításával).
  5. Sikeres ellenőrzés esetén a authenticate() visszaadja a felhasználó objektumát.
  6. A Django meghívja a login() függvényt (a nézetben vagy middleware-ben), amely beállítja a felhasználó session-jét.

Példa a nézetben való használatra:

# 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:
            # Hitelesítési hiba kezelése
            pass
    return render(request, 'login.html')

Fő funkciók és dekorátorok az autentikáció és engedélyek ellenőrzéséhez:

  • @login_required: Dekorátor, amely megköveteli a felhasználó bejelentkezését.
  • @permission_required('app_label.permission_code'): Dekorátor, amely egy adott engedély meglétét írja elő.
  • user.is_authenticated: Ellenőrzi, hogy a felhasználó be van-e jelentkezve.
  • user.has_perm('app_label.permission_code'): Ellenőrzi, hogy a felhasználó rendelkezik-e adott engedéllyel.
  • user.has_module_perms('app_label'): Ellenőrzi, hogy a felhasználó rendelkezik-e engedéllyel egy adott modulhoz.

Beállítások:

  • AUTHENTICATION_BACKENDS: A regisztrált backendek listája. Alapértelmezett: ['django.contrib.auth.backends.ModelBackend'].
  • LOGIN_URL: URL, ahová a nem bejelentkezett felhasználókat irányítja a @login_required használatakor.
  • LOGIN_REDIRECT_URL: URL, ahová a sikeres bejelentkezés után irányít.