Ошибка проверки csrf запрос отклонен chrome
Запрещено (403) Ошибка проверки CSRF. Запрос прерван. Даже используя
Я пытаюсь войти в систему в django, но получаю эту ошибку, я проверяю документацию CSRF, и у меня ничего не работает.
Как вы видите выше, я использую , и у меня есть «django.middleware.csrf.CsrfViewMiddleware» в моих установленных приложениях.
А мои взгляды таковы:
Я перенаправляюсь на другой файл HTML, где я не использую .
Я столкнулся с этой ошибкой, хотя использовал <% csrf_token %>. Но после изменения render_to_response на просто render проблема была решена.%>
3 ответа
Для работы защиты csrf требуется несколько вещей (ознакомьтесь с документами ):
- Ваш браузер должен принимать файлы cookie с вашего сервера.
- Убедитесь, что вы включили ' django.middleware.csrf.CsrfViewMiddleware' в качестве промежуточного программного обеспечения в settings.py (в качестве альтернативы используйте декоратор csrf_protect() для определенных представлений, которые вы хотите защитить)
- Убедитесь, что вы передаете токен csrf от django.core.context_processors.csrf диспетчеру контекста.
Когда вы загружаете свою страницу, посмотрите на исходный код страницы, используя ваш любимый браузер. Не открывайте html-файл шаблона, откройте URL-адрес, который указывает на представление, содержащее форму. Посмотрите, где вы разместили . Если вы видите что-то вроде
Ты должен быть в порядке.
Если вы, с другой стороны, видите NOTPROVIDED , что-то пошло не так при создании токена csrf. Заглянув в исходный код ( context_processors.py и csrf.py ), мы можем узнать, что:
- csrf(request) возвращает , если get_token(request) возвращает None.
- get_token(request) возвращает request.META.get("CSRF_COOKIE", None) .
Я предполагаю, что это означает, что он вернет None , если файл cookie не будет успешно создан.
Для вас это означает, что вы должны сначала заменить
Мы хотели бы, чтобы поле csrf было внутри
, а не внутри не внутри