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.Usermodell 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.Groupmodell csoportosítja a felhasználókat az engedélyek egyszerűbb kezelése érdekében. - Engedélyek: A
django.contrib.auth.models.Permissionmodell 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 adjango.contrib.auth.backends.ModelBackendvan használatban.
Autentikációs folyamat:
- A felhasználó elküldi a bejelentkezési adatokat (általában űrlapon keresztül).
- A Django meghívja a konfigurált backendek
authenticate()metódusát, átadva az adatokat. - A backend megkeresi a felhasználót a bejelentkezési név alapján.
- Ha megtalálja a felhasználót, ellenőrzi a jelszót (hash-ek összehasonlításával).
- Sikeres ellenőrzés esetén a
authenticate()visszaadja a felhasználó objektumát. - 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_requiredhasználatakor.LOGIN_REDIRECT_URL: URL, ahová a sikeres bejelentkezés után irányít.