Django CSRF-защита для межсайтовых почтовых запросов
Я использую react в качестве фронтенда и использую django для бэкенда.
Когда я размещаю фронтенд и бэкенд на localhost, все работает нормально, и X-CSRFTOKEN
отправляется отлично.
const instance = axios.create({
withCredentials: true,
withXSRFToken: true,
xsrfHeaderName : 'X-CSRFTOKEN',
xsrfCookieName : 'csrftoken'
});
Мои настройки DJango таковы (взяты из этого ответа Django - проверьте атрибут cookies "SameSite" ):
CORS_ALLOW_CREDENTIALS = True
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SAMESITE = "None"
SESSION_COOKIE_SAMESITE = "None"
но когда мой фронтенд (firebase) и бэкенд (eks aws) размещены на разных субдоменах, я получаю ошибку 403 Forbidden. Edit:
CORS_ALLOWED_ORIGINS = ["http://localhost:3000", "https://app.example.com"]
CSRF_TRUSTED_ORIGINS = [
"http://localhost:3000",
"https://app.example.com",
]
Он должен возвращать ответ 201 ccreated, но вместо этого он возвращает ошибку 403, CSRF verification failed. Request aborted.
Добавьте свое доменное имя в CSRF_TRUSTED_ORIGINS = ['https://yourdomain.com']
в settings.py
Проблема заключалась в том, что когда я проверял куки, домен для куки csrf был backend.app.com
, а фронтенд был размещен на frontend.app.com.
.
Поэтому я добавил эту настройку в модуль настроек django, и все заработало нормально:
CSRF_COOKIE_DOMAIN = ".app.com"