Токен Django CSRF Внезапно перестал работать
Я программирую приложение на Django уже больше года. Вначале у меня нормально работал токен CSRF, и с тех пор никаких проблем не возникало. Но теперь он внезапно перестал работать, как локально, так и в моей среде разработки, несмотря на то, что я не вносил в него никаких изменений. Кто-нибудь знает, почему это может быть и как я могу это исправить? Я отмечу, что я не могу увидеть, как csrfmiddlewaretoken передается на вкладке Сеть, согласно этому сообщению
Вот список всего, что я пробовал:
- Ознакомьтесь со списком из 5 рекомендаций, приведенных в отчете об ошибке:
- Браузер принимает файлы cookie: ДА
- Передача запроса методу рендеринга: ДА
- Использование {% csrf_token %} внутри тега формы: ДА
- Использование CsrfMiddleWare: ДА
- Форма содержит действительный токен csrf: ДА, потому что я бы сбросил файлы cookie вручную
- Удаление несоответствующих данных осуществляется следующими способами:
- Очистка кэшированных данных, файлов cookie и истории просмотров
- Перезагрузка компьютера
- Обновление Chrome
- Использование режима инкогнито
- Очистка данных пользовательского сеанса перед каждой отправкой формы
- Использую декораторы '@ensure_csrf_cookie' и '@csrf_protect' либо по отдельности, либо в комбинации, прежде чем мой view заработает. Использовал такой синтаксис:
from django.views.decorators.csrf import ensure_csrf_cookie
from django.views.decorators.csrf import csrf_protect
...
@ensure_csrf_cookie
@csrf_protect
def templateFunc(request):
- В settings.py, убедившись, что переменным csrf присвоен правильный локальный хост, с номерами портов и без них:
ALLOWED_HOSTS = ['127.0.0.1', 'localhost', ".awsapprunner.com", "dev.org"]
CSRF_COOKIE_DOMAIN = ['127.0.0.1:8000', 'localhost:8000', 'dev.org']
CSRF_TRUSTED_ORIGINS=['http://127.0.0.1:8000', 'http://localhost:8000', 'https://dev.org']
CSRF_COOKIE_SECURE = False
#CSRF_COOKIE_SECURE = True
Форма, которую я отправляю, не требует входа пользователя в систему, поэтому не должно возникнуть никаких проблем с рассинхронизацией учетных данных пользователя. Я также провожу локальное тестирование, так что с AWS это не проблема
Я использую Python 3.12.5 и Django 4.2.7. Насколько мне известно, они не изменились с тех пор, как мой токен CSRF заработал
Основываясь на результатах вашей отладки, У меня есть несколько предложений:
В вашем setting.py
CSRF_COOKIE_DOMAIN
есть список доменов, но в идеале это должна быть строка в соответствии с Django doc. Ссылка: https://docs.djangoproject.com/en/4.2/ref/settings/#csrf-cookie-domainЕсли вы отправляете какие-либо запросы AJAX/Fetch XHR, убедитесь, что в запрос включен заголовок, связанный с токеном CSRF. И проверьте, установлен ли токен CSRF в файлах cookie браузера.