Из каких основных компонентов состоит встроенная система аутентификации в Django?

Ответ

Встроенная система аутентификации Django является частью философии «batteries-included» и предоставляет готовый набор инструментов для управления пользователями, группами и правами доступа.

Ключевые компоненты:

  1. Модель User (django.contrib.auth.models.User)

    • Стандартная модель для хранения информации о пользователе (имя, пароль, email, флаги is_staff, is_superuser и т.д.).
    • Пароли хранятся в виде хэша (по умолчанию используется PBKDF2).
  2. Механизм аутентификации

    • Функция authenticate(request, username=..., password=...) проверяет учетные данные пользователя и возвращает объект User в случае успеха или None.
  3. Управление сессиями

    • Функции login(request, user) и logout(request) управляют сессией пользователя. login привязывает пользователя к текущей сессии, а logout — отвязывает.
  4. Контроль доступа

    • Декоратор @login_required для представлений-функций и миксин LoginRequiredMixin для представлений-классов ограничивают доступ только для аутентифицированных пользователей.

Пример полного цикла:

from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required

# Проверка данных и вход
def login_view(request, username, password):
    user = authenticate(request, username=username, password=password)
    if user is not None:
        login(request, user)
        # Пользователь успешно вошел в систему
        return True
    return False

# Представление, доступное только авторизованным пользователям
@login_required
def protected_view(request):
    # Логика для авторизованного пользователя
    return f"Hello, {request.user.username}!"

# Выход из системы
def logout_view(request):
    logout(request)

Для кастомизации рекомендуется наследовать от AbstractUser или AbstractBaseUser, чтобы расширить стандартную модель пользователя.