Приложение django работает локально, но csrf запрещен на heroku
Мое приложение работает нормально на heroku local
, но после развертывания в heroku, каждый раз, когда я пытаюсь войти/зарегистрироваться/зарегистрироваться как администратор, оно выдает следующее:
я пытался разместить @csrf_exempt
на profile
представлениях
что я могу сделать?
Похоже, что у вас нет адреса heroku в качестве доверенного происхождения в файле setting.py вашего проекта, для этого вы можете использовать corsheaders
pip install django-cors-headers
затем в вашем файле settings.py
INSTALLED_APPS = [
...
'corsheaders',
...
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
...
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsMiddleware',
]
Если бы вы еще не развернули приложение, вы могли бы добавить CORS_ORIGIN_ALLOW_ALL = True
, но поскольку вы знаете, где развернуто ваше приложение, использование белого списка для происхождения является гораздо лучшей идеей
CORS_ORIGIN_WHITELIST = (
'https://pacific-coast-78888.herokuapp.com',
)
Сообщение об ошибке достаточно понятно (прошу прощения за опечатки, так как я не могу скопировать с изображения):
Origin checking failed - https://pacific-coast-78888.herokuapp.com does not match any trusted origins
Используемый вами домен не является доверенным источником для CSRF.
Далее идет ссылка на документацию, которая, как я подозреваю, ведет на документацию Django CSRF, хотя документация для CSRF_TRUSTED_ORIGINS
настройки может быть более полезной:
Список доверенных источников для небезопасных запросов (например,
POST
).Для запросов, включающих заголовок
Origin
, CSRF-защита Django требует, чтобы заголовок соответствовал происхождению, присутствующему в заголовкеHost
.
Найдите в своем settings.py
для CSRF_TRUSTED_ORIGINS
и добавьте https://pacific-coast-78888.herokuapp.com
в список. Если такой настройки еще не существует, просто добавьте ее:
CSRF_TRUSTED_ORIGINS = ["https://pacific-coast-78888.herokuapp.com"]
Если Heroku использует django "4.x.x" версии:
Затем, если ошибка выглядит так, как показано ниже:
Origin checking failed - https://example.com не соответствует ни одному доверенному источнику.
Добавьте этот код ниже в "settings.py":
CSRF_TRUSTED_ORIGINS = ['https://example.com']
В вашем случае вы получили эту ошибку:
Origin checking failed - https://pacific-coast-78888.herokuapp.com не соответствует ни одному доверенному источнику.
Итак, вам нужно добавить этот код ниже в ваш "settings.py":
CSRF_TRUSTED_ORIGINS = ['https://pacific-coast-78888.herokuapp.com']