CSRF 403 при входе в Django по умолчанию
Я довольно новичок в Django. Вот что мне нужно понять:
После обновления с Django 3 до 4:
На локальном сервере разработчиков проблем нет.
На производстве: Ошибка CSRF 403 при входе в систему.
На странице входа в систему загружен файл cookie, содержащий
csrftoken: pAFeeUI8YFXZ2PKRYxOTX1qz4Xgto42WVNi7FFvBlZDqcFLwQ2rdQvVeZBHFSpLW
(Локальное и сеансовое хранилища пусты)
В элементе FORM:
<input type="hidden" name="csrfmiddlewaretoken" value="Vz4FiujD4qkLpxCwWNJU0HCWs4u0Qf4RrMHyJf66rK0cznDbOimeTb7BnIVckANR">
Заметьте, что они не совпадают.
Я попробовал вручную удалить куки, а также запустить ./migrate.py clearsessions
.
В первый раз, вчера, казалось, что ошибка не возникает в окне инкогнито, но сегодня она сохраняется даже в окне инкогнито, а также в другом браузере.
Дополнительная информация
allauth был установлен ранее, но вызывал бесконечный цикл перенаправления при входе в систему, поэтому был удален. url страницы входа /login/?next=/
.
Большое спасибо.
вы должны добавить {% csrf_token %},
{% csrf_token %}
<input type="hidden" name="csrfmiddlewaretoken" value="Vz4FiujD4qkLpxCwWNJU0HCWs4u0Qf4RrMHyJf66rK0cznDbOimeTb7BnIVckANR">
я так думаю.
По крайней мере, в Django 4.0, вы можете и, возможно, должны указать доверенные источники CSRF в вашем settings.py
файле:
CSRF_TRUSTED_ORIGINS = ["https://yourdomain.com", "https://www.yourdomain.com"]
Обратите внимание на www
и non-www
, а также на отсутствие трелей /
.
Во всяком случае, это решило проблему для меня.
Смотрите Docs.