JavaRush /Курси /Модуль 3: Django /Вступ до системи автентифікації Django

Вступ до системи автентифікації Django

Модуль 3: Django
Рівень 15 , Лекція 0
Відкрита

Спочатку розберемося, що взагалі означає "автентифікація". Якщо говорити простими словами, це механізм перевірки, хто перед нами. Наприклад, якщо веб-додаток — це елітний ресторан, то автентифікація — це швейцар, який перевіряє ваше запрошення. А ось "авторизація" — це визначення того, до яких зон ресторану у вас є доступ: у VIP-зал, на кухню чи до комори.

У Django все влаштовано досить елегантно: автентифікуватися можна буквально "з коробки". Але як це працює? За лаштунками стоїть потужна вбудована система, яка управляє користувачами, їхніми даними та процесами їх входу, виходу і реєстрації. У цій лекції ми розберемо основні концепції та можливості цієї системи.

Основні концепції аутентифікації

Різниця між аутентифікацією та авторизацією

Часто ці два терміни плутають, тому важливо закріпити різницю:

  • Аутентифікація — це підтвердження особи користувача. Наприклад, введення логіна та пароля.
  • Авторизація — це надання прав доступу. Наприклад, чи може цей користувач переглядати сторінку аналітики або редагувати базу даних.

Django "з коробки" забезпечує аутентифікацію. Авторизацію можна налаштовувати вручну за допомогою декораторів, middleware та кастомних прав.

Вбудована система аутентифікації в Django

Django включає потужну вбудовану систему, яка, по суті, економить тобі купу часу (і нервів). Використовуючи її, ти отримуєш:

  • Готову модель користувача (User) для зберігання інформації про користувача.
  • Зручні функції для аутентифікації — вхід, вихід, перевірка авторизації.
  • Засоби для перевірки паролів та їх безпечного зберігання (з використанням хешів).

Модель користувача: User

Django має досить універсальну модель користувача, User, яка знаходиться в модулі django.contrib.auth.models. Ось основні її поля:

username, password, email, first_name, last_name

Додатково, у неї є методи, якими ти будеш користуватись найчастіше:

  • is_authenticated — перевіряє, чи залогінений користувач.
  • set_password(raw_password) — шифрує та зберігає пароль у безпечному форматі.
  • check_password(raw_password) — перевіряє, чи відповідає введений пароль тому, що в базі.

Ти можеш перевірити все прямо через shell:

$ python manage.py shell

Спробуємо створити користувача:

from django.contrib.auth.models import User

# Створення користувача
user = User.objects.create_user(username='john_doe', password='securepassword123', email='john@example.com')

# Перевірка створеного користувача
print(user.username)  # john_doe
print(user.is_authenticated)  # False (поки не увійшов)

# Перевірка пароля
print(user.check_password('securepassword123'))  # True

Особливості вбудованої системи аутентифікації

Система аутентифікації в Django вигідно виділяється своїм дизайном:

  • Підтримка сесій: коли користувач входить у систему, його дані зберігаються в сесії. Ти можеш керувати цим через SESSION_COOKIE_AGE у налаштуваннях.
  • Бекенди аутентифікації: Django дозволяє визначати свій спосіб перевірки даних (наприклад, якщо потрібно аутентифікувати користувачів через зовнішні API або LDAP).
  • Менеджери користувачів: модель User використовує спеціальний менеджер, UserManager, який містить зручні методи для створення користувачів (create_user() і create_superuser()).

Архітектура системи аутентифікації

Давайте трохи заглибимося в те, як це все працює всередині. Коли користувач входить у систему, Django взаємодіє з кількома ключовими елементами:

  1. Модель користувача (User).

    • Це база даних, де зберігаються всі облікові записи.
  2. Аутентифікаційні бекенди (Authentication Backends).

    • Це "механізми", які перевіряють, чи відповідає введений пароль зазначеному користувачу.
    • Django за замовчуванням використовує ModelBackend, який працює з моделлю User.
  3. Менеджери користувачів.

    • Менеджери — це спеціальні класи, які містять зручні методи для управління користувачами (наприклад, швидке створення суперкористувача).
  4. Middleware для аутентифікації.

    • Middleware обробляє аутентифікацію на рівні запитів (наприклад, вирішує, чи доступний поточному користувачу запитуваний ресурс).

Все це добре ілюструється наступною схемою:

[HTTP-запит] -> [Middleware] -> [Authentication Backend] -> [User Model]

Приклад роботи з аутентифікаційним бекендом

Скажімо, ви хочете використовувати авторизацію за email, а не за username. Для цього вам потрібно налаштувати кастомний бекенд. Ось приклад:

from django.contrib.auth.backends import BaseBackend
from django.contrib.auth.models import User

class EmailBackend(BaseBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):
        try:
            user = User.objects.get(email=username)
            if user.check_password(password):
                return user
        except User.DoesNotExist:
            return None

    def get_user(self, user_id):
        try:
            return User.objects.get(pk=user_id)
        except User.DoesNotExist:
            return None

Додайте цей бекенд у налаштування AUTHENTICATION_BACKENDS:

AUTHENTICATION_BACKENDS = ['path.to.EmailBackend']

Тепер ваш вхід у систему буде перевіряти email замість username.

Налаштування сесій

Django використовує сесії для зберігання інформації про увійшлого користувача. Кожного разу, коли користувач проходить аутентифікацію, створюється сесійний файл. Налаштувати сесії можна в settings.py. Наприклад:

# Час життя сесії в секундах (один тиждень)
SESSION_COOKIE_AGE = 7 * 24 * 60 * 60

Практичне застосування навичок

Тепер ти можеш зрозуміти, які можливості пропонує система аутентифікації і як її використовувати. Ці знання знадобляться тобі в:

  • Побудові захищених веб-додатків. Від простої сторінки логіну до складних систем із правами доступу.
  • Створенні кастомних рішень для бізнесу. Наприклад, підтримка входу через соцмережі або API.
  • Проходженні співбесід. Питання на тему аутентифікації — досить популярна штука.

Залишилося тільки втілити все це в коді, і ти будеш готовий заглиблюватися у створення сторінок входу, реєстрації та інших крутих штук, які ми розберемо в наступних лекціях!

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ