Как включить базовый http auth через Django?
Как включить базовый http auth в Django?
Согласно Django docs, базовый http auth может быть включен непосредственно в Django, не требуя поддержки сервера.
Я добавил django.contrib.auth.middleware.RemoteUserMiddleware
в свой MIDDLEWARE
список и добавил django.contrib.auth.backends.RemoteUserBackend
в свой AUTHENTICATION_BACKENDS
список.
поэтому я создал простое представление:
import logging
from django.http.response import JsonResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def test_auth(request):
print('Request.user: %s' % request.user)
print('META:', request.META)
print('REMOTE_USER:', request.META.get('REMOTE_USER'))
if request.user.is_anonymous:
return JsonResponse({"success": False}, safe=False)
return JsonResponse({"success": True}, safe=False)
и зарегистрировал его в моем urls.py
как /test_auth
.
Затем для проверки я вызываю его с помощью curl:
curl -u "myuser:mysupersecretpassword" -0 -v -X GET http://127.0.0.1:8000/test_auth
Однако, он показывает, что Request.user: AnonymousUser
, подразумевая, что RemoteUserBackend
не вызывается. Я проверил свои учетные данные myuser:mysupersecretpassword
и подтвердил, что могу войти под этим пользователем через обычный логин администратора Django.
Я использую Django 3.2.
Почему базовый аутентификатор не работает с RemoteUserBackend
? Есть ли еще один шаг, который я упускаю?
Я тестирую, используя devserver. Не проходит ли это через заголовок REMOTE_USER
, установленный curl? Если да, то как мне это обойти?