Почему логин администратора Django выдает ошибку 403 CSRF? - PullRequest
8 голосов
/ 09 сентября 2010

Я использую Django 1.2.2 и получаю следующую ошибку при попытке войти в систему администратора Django:

Запрещена (403) проверка CSRF.Запрос отменен.

Причина, указанная для сбоя:

Нет файла CSRF или файла cookie сеанса.

** Я не произвел настройки для администратора barebone-систем и при проверкев источнике есть токен CSRF в форме, в которой я считаю правильное место.

Когда я смотрю на фактический отправляемый запрос, отправляется токен csrf, но Джанго по-прежнему говорит, что проверка CSRF не удалась.

Может ли кто-нибудь указать мне правильное направление?Почему это происходит?

Ответы [ 3 ]

6 голосов
/ 14 декабря 2010

У меня была такая же проблема на 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, вставьте ее в MIDDLEWARE_CLASSES:

'your_app_name.middleware.disableCSRF',

Возможно, это не самое безопасное решение, но наш сайт Django является строго внутренним, поэтому существует минимальный риск для любого типа вредоносных действий. Это простое решение, не требующее изменения шаблонов / представлений, и оно работало мгновенно (в отличие от других, которые я пробовал).

Надеюсь, кто-то в ситуации, аналогичной моей, найдет это полезным.

Благодарность принадлежит Джону МакКоллуму, на чьем сайте Я нашел это.

5 голосов
/ 09 сентября 2010

1) У вас есть 'django.middleware.csrf.CsrfViewMiddleware' в вашем settings.MIDDLEWARE_CLASSES?

2) Вы уверены, что всегда были на 1.2.2?Это только вышло прошлой ночью ...

1 голос
/ 10 сентября 2010

Согласно документам , вам необходимо не только скрытое поле формы csrf, но и файл cookie csrftoken. В сообщении об ошибке, которое вы указали, также предлагается отсутствующий файл cookie.

Я бы посмотрел файлы cookie вашего браузера, чтобы убедиться, что файл cookie csrftoken присутствует.

...