Почему Django admin login дает мне ошибку 403 CSRF?
Я запускаю Django 1.2.2, и я получаю следующую ошибку, когда пытаюсь войти в администратор Django:
запрещенная (403) проверка CSRF неудачный. Запрос прерван.
причина отказа:
нет CSRF или сеанса cookie.
** Я не сделал никакой настройки для администратора barebones, и когда я проверяю источник, есть токен CSRF в форме в том, что я считаю правильным место.
когда я смотрю на фактический запрос, который отправляется, отправляется токен csrf, но Django все еще говорит, что проверка CSRF не удалась.
может ли кто-нибудь указать мне в правильном направлении? Почему это происходит?
3 ответов
1) у вас есть 'django.middleware.csrf.CsrfViewMiddleware'
в своем settings.MIDDLEWARE_CLASSES
?
2) вы уверены, что всегда были на 1.2.2? Это вышло только вчера вечером...
у меня была такая же проблема на Django 1.2.1 FINAL. Поскольку я знал, что Django на нашем производственном сайте никогда не будет обновляться с 1.0 (по разным причинам), я нашел обходной путь, который я внедрил в свою версию разработки settings.py, выходя из производства settings.py нетронутой.
создать middleware.py файл в каталоге приложения со следующим кодом:
class disableCSRF:
def process_request(self, request):
setattr(request, '_dont_enforce_csrf_checks', True)
return None
затем в вашей версии разработки settings.py, вставьте это в средние классы:
'your_app_name.middleware.disableCSRF',
возможно, не самое безопасное решение, но наш сайт Django строго внутренний, поэтому существует минимальный риск для любых вредоносных действий. Это решение простое и не связано с изменениями шаблонов/представлений, и оно сработало мгновенно (в отличие от других, которые я пробовал).
надеюсь, кто-то в аналогичной ситуации с моей найдет это полезным.
заслуга Джон Макколам, на которой сайт я нашел этот.
по словам docs, не только вам нужно поле скрытой формы csrf, но и csrftoken
cookie. Сообщение об ошибке, которое вы предоставили, также предлагает отсутствующий файл cookie.
Я бы посмотрел в cookies Вашего браузера, чтобы обеспечить csrftoken
cookie присутствует.