Структура Django REST во многом предполагает, что запросы аутентифицируются на основе пользователя, но они обеспечивают поддержку анонимных запросов аутентификации. Хотя это в значительной степени нарушает предположение о том, что «аутентификация» означает, что «проверка пользователя (Django) является подлинной», инфраструктура Django REST позволяет это произойти и вместо этого заменяет AnonymousUser
.
Аутентификация в DRF может определять как request.user
(аутентифицированный пользователь), так и request.auth
(обычно используемый токен, если применимо) в запросе. Таким образом, для вашей проверки подлинности вы будете придерживаться маркеров, которые вы создали (в модели или где-то еще), и они будут проверяться вместо учетных данных пользователя, и вы просто не сможете установить пользователя.
from django.contrib.auth.models import AnonymousUser
from rest_framework import authentication
from rest_framework import exceptions
class ExampleAuthentication(authentication.BaseAuthentication):
def authenticate(self, request):
auth = authentication.get_authorization_header(request)
if not auth or auth[0].lower() != b'token':
return None
if len(auth) == 1:
msg = _('Invalid token header. No credentials provided.')
raise exceptions.AuthenticationFailed(msg)
elif len(auth) > 2:
msg = _('Invalid token header. Credentials string should not contain spaces.')
raise exceptions.AuthenticationFailed(msg)
try:
token = Token.objects.get(token=auth[1])
except Token.DoesNotExist:
raise exceptions.AuthenticationFailed('No such token')
return (AnonymousUser(), token)
В этом примере предполагается, что у вас есть Token
модель, которая хранит лексемы, которые будут проверкой подлинности. Объекты токена будут установлены в request.auth
, если запрос был аутентифицирован должным образом.
Спасибо, я просмотрел документы, все схемы auth основаны на предположении, что запросы исходят от пользователя, есть ли способ аутентификации запросов, у которых нет какого-либо пользователя, связанного с ними? – aliasav
Учитывая, что «аутентификация - это процесс подтверждения личности человека», я действительно не понимаю, что вы подразумеваете под аутентификацией запросов, у которых нет идентификатора, связанного с ними? – spectras