Ответ 1
Заглядывая в класс TokenAuthentication, я вижу, что проверяемый заголовок является "HTTP_AUTHORIZATION", а не "Authorization"
Не совсем верно, когда вы выполняете поиск в запросе META
dict, заголовки, которые он действительно ищет, не имеют предшествующего HTTP_
, поэтому request.META.get('HTTP_AUTHORIZATION', '')
фактически ищет заголовок Authorization
в запросе.
Проблема заключается в том, что в моих unittests аутентификация терпит неудачу Изменение заголовка в "HTTP_AUTHORIZATION", похоже, работает
Я не дважды проверял, как выглядит тестовый клиент, но я считаю, что настройка HTTP_AUTHORIZATION
- это то, что вам нужно сделать, чтобы получить эквивалент фактической установки заголовка Authorization
. Если вы действительно сделали HTTP-запрос, вы должны найти, что настройка заголовка auth работает точно так, как вы ожидали.
См. документацию request.META
здесь: https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.META
Edit
Django docs при поиске заголовков в request.META
:
За исключением CONTENT_LENGTH и CONTENT_TYPE, как указано выше, любые HTTP-заголовки в запросе преобразуются в META-ключи посредством преобразование всех символов в верхний регистр, заменяя любые дефисы на подчеркивания и добавление префикса HTTP_ к имени. Так, например, заголовок, названный X-Bender, будет сопоставлен с ключом META HTTP_X_BENDER.
Django docs по настройке заголовков с тестовым клиентом:
Однако вы можете использовать аргументы ключевых слов, чтобы указать некоторые заголовки по умолчанию. Например, в каждом запросе будет отправлен заголовок
User-Agent
HTTP:c = Клиент (HTTP_USER_AGENT = 'Mozilla/5.0')