Я использую TokenAuthentication в Django REST Framework, чтобы иметь сценарий удаленного доступа к моему API. Домен, на котором запущен API, находится за сертификатом TLS.Django REST Framework с проблемой TokenAuthentication с CSRF/CORS
Я просмотрел много источников и попробовал много вариантов, прежде чем приходить сюда, чтобы выяснить, в чем моя проблема. Короче говоря, я продолжаю получать ошибку CSRF verification failed. Request aborted.
при попытке опубликовать.
Вот мое мнение:
# @csrf_exempt
@api_view(['POST'])
@authentication_classes((TokenAuthentication,))
@permission_classes((permissions.IsAuthenticated,))
def create_object(request):
csrf_exempt
декоратор ничего не сделал здесь. Таким образом, я также попробовал его на моем urls.py
:
url(r'^create_object/', csrf_exempt(views.create_object),),
Я даже пытался писать пользовательский декоратор, и используя this suggestion. Даже когда я это делаю, я даже не могу заставить этого декоратора выполнить, прежде чем получить отказ. Возможно, есть проблема с заказом моего промежуточного ПО?
'sslify.middleware.SSLifyMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'corsheaders.middleware.CorsPostCsrfMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.RemoteUserMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
Вот мои настройки Джанго CORS:
CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = ('example.com',)
CORS_REPLACE_HTTPS_REFERER = True
Мое решение (так как я не мог понять причину) заключался в добавлении промежуточного программного обеспечения, которое выполняется перед csrf, который устанавливает флаг на объекте '' запрос'', чтобы пропустить защиту после проверки на путь запроса. Завтра я отправлю код как ответ, когда у меня появится шанс. –