У меня есть сервер backend на localhost: 8000 и сервер интерфейса на localhost: 3000. Backend - это Django, и у меня установлен пакет corsheaders, и я делаю запросы GET без проблем. Когда я открываю свой сайт, первый запрос GET успешно устанавливает токен CSRF (я вижу cookie в инструментах dev).Django CSRF кросс-сайт AJAX проблема
У меня есть это в settings.py:
CORS_ORIGIN_WHITELIST = (
'localhost:3000'
)
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT'
)
CORS_ALLOW_HEADERS = (
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
)
CSRF_TRUSTED_ORIGINS = (
'localhost:3000',
)
CORS_ALLOW_CREDENTIALS = True
Теперь я пытаюсь сделать запрос POST, и я постоянно отвергнут сервером:
403 - Forbidden (CSRF cookie not set.): /myapp/myview/
и это что мой JS выглядит следующим образом:
let csrftoken = utils.getCookie('csrftoken'); // logged this on the console, the token is really here
jQuery.ajaxSetup({
beforeSend: function(xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}); // this might be wrong - I did read it is used only if it's not cross site, but I still gave it a try
jQuery.ajax({
url: url,
type: 'POST',
data: {attr: value, csrfmiddlewaretoken: csrftoken}
})...
Я пробовал только с csrfmiddlewaretoken в данном AJAX. Я пробовал только с настройкой заголовка запроса. Я пробовал и то, и другое. Еще не повезло. Я, очевидно, что-то пропустил; Я никогда раньше не пытался делать POST в Django на разных сайтах.
Любые предложения?
EDIT: Я выяснил, что проблема находится в другом месте.
проверить это https://github.com/ottoyiu/django-cors-headers –
@ PiyushS.Wanare я уже использовал Джанго-Корс-заголовки, но теперь я расширил мои настройки с CORS_ALLOW_HEADERS/Methods CSRF_TRUSTED_ORIGINS и CORS_ALLOW_CREDENTIALS, но он все еще не работает, я получаю такое же сообщение об ошибке. – dnmh
Вы обнаружили, что проблема в другом месте? Можете ли вы указать нам на эту информацию или закрыть вопрос? – waterproof