403 Запрещено: «Ошибка CSRF: отсутствует токен CSRF». на DRF api-token-auth/после применения csrf_exemptPython

Программы на Python
Ответить
Anonymous
 403 Запрещено: «Ошибка CSRF: отсутствует токен CSRF». на DRF api-token-auth/после применения csrf_exempt

Сообщение Anonymous »

Я сталкиваюсь с постоянной ошибкой 403 Forbidden с подробностями:

CSRF Failed: токен CSRF отсутствует.

Это происходит при попытке получить токен аутентификации с использованием встроенной конечной точки api-token-auth/ Django REST Framework.

Контекст
  • Я отправляю запрос POST от Postman (используя raw и application/json для тела).
  • Защита CSRF мешает, поскольку Postman, как внешний клиент, не обрабатывает файлы cookie сеанса или токены CSRF.
  • Я попытался исправить это, явно применив декоратор @csrf_exempt к представлению в моем urls.py, но ошибка осталась.
Конфигурация и код
Вот соответствующие фрагменты из настроек моего проекта:
1. settings.py (промежуточное ПО и аутентификация DRF)
Мое промежуточное ПО включает защиту от CSRF, и у меня включена SessionAuthentication, что, по-видимому, и вызывает конфликт.

Код: Выделить всё

MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]

REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10,
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
}
2. urls.py (где применяется csrf_exempt)
Вот как я сейчас пытаюсь исключить представление. Я импортировал csrf_exempt из django.views.decorators.csrf.

Код: Выделить всё

from django.contrib import admin
from django.urls import path,include
from rest_framework.authtoken import views
from django.views.decorators.csrf import csrf_exempt

from api import views as api_views

urlpatterns = [
path("home/",include("expenses.urls")),
path("admin/", admin.site.urls),
path("api/",include("api.urls")),
path('api-auth/', include('rest_framework.urls')),
path('api-token-auth/', csrf_exempt(views.obtain_auth_token)),
]
Запрос:
Изображение запроса, который завершается ошибкой

Вопрос
Почему декоратор csrf_exempt игнорируется представлением get_auth_token (который представляет собой представление на основе функций в реализации DRF), хотя я его обертываю urls.py?
Каков надежный и надежный способ отключить защиту CSRF только для конечной точки api-token-auth/, когда в settings.py включена SessionAuthentication?

Примечание. Мне нужно сохранить SessionAuthentication для просматриваемого файла. API.


Подробнее здесь: https://stackoverflow.com/questions/798 ... th-after-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»