Autoryzacja i uwierzytelnianie w Django
Django posiada wbudowany, rozbudowany system zarządzania użytkownikami, logowaniem i uprawnieniami. Dzięki niemu można szybko tworzyć aplikacje z rejestracją użytkowników, kontrolą dostępu i autoryzacją akcji.
1. System użytkowników w Django
Django domyślnie dostarcza model User (django.contrib.auth.models.User) z polami:
username,password,email,first_name,last_name,is_staff,is_superuser,is_active,last_login,date_joined.
System obsługuje:
- rejestrację i logowanie,
- autoryzację (czy użytkownik ma prawo wykonać daną akcję),
- grupy i uprawnienia,
- zarządzanie hasłami (hashowanie, reset, zmiana).
Aby włączyć go w projekcie, upewnij się, że w settings.py znajdują się:
2. Logowanie, wylogowanie, rejestracja
Logowanie (views.py)
Django udostępnia wbudowaną funkcję authenticate() oraz login():
Wylogowanie (views.py)
Rejestracja użytkownika (views.py)
Można ją zaimplementować samodzielnie albo użyć UserCreationForm:
Szablon logowania (login.html):
3. Ograniczanie dostępu (login_required, permissions)
1. Dekorator login_required
Używany do ograniczenia dostępu do widoków:
Jeśli użytkownik nie jest zalogowany, zostanie przekierowany na stronę logowania (settings.LOGIN_URL, domyślnie /accounts/login/).
2. Sprawdzanie uprawnień (permissions)
Każdy model w Django dostaje automatycznie podstawowe uprawnienia: add, change, delete, view.
Możemy sprawdzać je w widoku:
3. Grupy użytkowników
W panelu admina można tworzyć grupy i przypisywać im uprawnienia. Użytkownik przypisany do grupy dziedziczy jej uprawnienia.
4. Rozszerzanie modelu użytkownika
Domyślny model User jest często niewystarczający (np. brakuje pola avatar). Django umożliwia różne sposoby rozszerzania użytkownika:
1. Profil użytkownika – OneToOneField
Tworzymy dodatkowy model powiązany z User:
Zwykle łączy się go z sygnałami (signals.post_save), aby profil tworzył się automatycznie po rejestracji użytkownika.
2. Własny model użytkownika (AbstractUser)
Najbardziej elastyczne podejście – tworzymy własny model dziedziczący po AbstractUser:
W settings.py ustawiamy:
Uwaga: zmianę
AUTH_USER_MODELnależy ustawić na początku projektu, przed wykonaniem migracji – późniejsza zmiana jest trudna.