Реалізація аутентифікації користувача в Django Rest Framework для методу POST

Реалізація аутентифікації користувача в Django Rest Framework для методу POST

8 Березня 2024 в 16:00 28

У розробці веб-додатків часто виникає потреба забезпечити безпеку та контроль доступу до різних ресурсів, включаючи можливість виконання певних дій лише для аутентифікованих користувачів. У Django Rest Framework (DRF) для цього існує кілька підходів, але одним з найпоширеніших є використання власного класу аутентифікації.

У даному випадку ми розглянемо реалізацію аутентифікації користувача в DRF для методу POST за допомогою власного класу аутентифікації та перевірки дозволів.

Спершу, давайте розглянемо код моделі, серіалізатора, представлення та класу аутентифікації, які використовуються у нашому додатку:

models.py

serializer.py

views.py

authentication.py

У цьому коді ми визначаємо модель OpeningHours, яка представляє години роботи, і серіалізатор для цієї моделі. У представленні OpeningHoursViewSet ми використовуємо наш власний клас аутентифікації CustomAuthentication та клас дозволів IsAuthenticatedOrReadOnly. Ми також визначаємо метод perform_create, щоб автоматично встановити поточного користувача при створенні нового запису.

Проте, коли ми спробуємо виконати запит POST без аутентифікації, ми отримаємо помилку “Authentication credentials were not provided”, навіть якщо ми передали значення HTTP_USERNAME у заголовку запиту.

Для вирішення цієї проблеми ми повинні перевірити кілька речей. По-перше, переконайтеся, що ви правильно налаштували HTTP-заголовок з ім’ям користувача у вашому клієнті. У нашому випадку, ми використовуємо Postman, і ми повинні встановити ключ як HTTP_USERNAME та значення як ім’я користувача.

Далі, переконайтеся, що ваша функція аутентифікації коректно зчитує ім’я користувача з HTTP-заголовка. У нашому прикладі, ми перевіряємо значення HTTP_USERNAME і шукаємо користувача з таким ім’ям. Якщо користувач знайдений, ми повертаємо його як аутентифікованого користувача.

Якщо усі налаштування вірні, переконайтеся, що ваша перевірка дозволів правильно налаштована. У нашому випадку, ми використовуємо IsAuthenticatedOrReadOnly, що означає, що користувач повинен бути аутентифікованим, щоб виконати запит POST.

Якщо після виконання цих кроків проблема продовжується, перевірте журнали та діагностичні повідомлення для отримання додаткової інформації про те, що може піти не так під час спроби аутентифікації користувача.