Почему 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 присутствует.