Как использовать токен csrf с django, react и axios и nginx
Вот уже несколько часов я получаю следующие ошибки при выполнении post запроса к бэкенду из react frontend
Access to XMLHttpRequest at 'https ://api.foo.com/api/create/' from origin 'https ://www.foo.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Мое приложение полного стека работало правильно, react front end, django backend, инфраструктура из s3 для react, оба размещены на aws cloudfront с использованием terraform, пока я не попытался реализовать токен csrf ниже
я создал следующий конфиг
реагировать
axios.defaults.xsrfHeaderName = "X-CSRFToken";
axios.defaults.xsrfCookieName = 'csrftoken';
axios.defaults.withCredentials = true
const Create = () => {
const [fields, handleFieldChange] = FormFields({
name: "",
});
const options = {
headers: {
'Content-Type': 'application/json',
}
};
const handleSubmit = (e) => {
e.preventDefault();
axios.post("https ://api.foo.com/create/", fields, options)
.then(response => {
...
django settings.py
CORS_ORIGIN_ALLOW_ALL = False
CORS_ALLOW_CREDENTIALS = True
CSRF_COOKIE_NAME = "csrftoken"
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',
'Access-Control-Allow-Origin',
]
nginx
...
location / {
add_header 'Access-Control-Allow-Origin' 'https ://www.foo.com';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT,DELETE,PATCH';
add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,If-Modified-Since,X-CSRFToken';
...
}
Любая помощь будет очень признательна, спасибо