Обработка аутентификации
REST Framework предоставляет классы аутентификации для идентификации пользователя, выполняющего запрос. Если аутентификация выполнена успешно, framework устанавливает User в request.user. Если ни один пользователь не прошел проверку подлинности, вместо него устанавливается экземпляр AnonymousUser.
REST Framework предоставляет следующие конечные точки аутентификации:
- BasicAuthentication : Обычная проверка подлинности HTTP. Пользователь и пароль отправляются клиентом в заголовке HTTP Authorization, закодированном с помощью Base64. Подробнее здесь: https://en.wikipedia.org/wiki/Basic\_access\_authentication
- TokenAuthentication : Аутентификация на основе токенов. Модель Token используется для хранения токенов пользователя. Пользователи включают токен в заголовке HTTP Authorization для проверки подлинности.
- SessionAuthentication : Использует бекэнд Django session для аутентификации. Эта серверная часть полезна для выполнения запросов AJAX, прошедших аутентификацию, в интерфейс API с фронтенда сайта.
Можно создать кастомный способ аутентификации, используя подкласс BaseAuthentication, предоставляемый REST Framework, и переопределить метод authenticate().
Можно задать проверку подлинности для каждого представления или установить ее глобально с параметром DEFAULT_AUTHENTICATION_CLASSES.
Аутентификация определяет только пользователя, выполняющего запрос. Она не закрывает и не открывает доступ к представлениям. Для ограничения доступа к представлениям необходимо использовать access представления.
Все сведения об аутентификации можно найти здесь: http://www.django-rest-framework.org/api-guide/authentication/
Давайте добавим в наше представлени BasicAuthentication. Отредактируйте файл api/views.py в приложении courses и добавьте атрибут authentication_classes в CourseEnrollView следующим образом:
from rest_framework.authentication import BasicAuthentication
class CourseEnrollView(APIView):
authentication_classes = (BasicAuthentication,)
# ...
Пользователи будут идентифицироваться по учетным данным, заданным в заголовке Authorization HTTP-запроса.