Вход в django admin внезапно требует токена csrf

Вопрос:Я несколько минут назад вошел в консоль администратора django. Я, должно быть, кое-что изменил, что вызвало эту ошибку при входе в систему как суперпользователь: Запрещено (403) Не удалось выполнить проверку CSRF. Запрос прерван. Эта ошибка застала меня на страже, когда я вошел всю ночь. Зачем мне вдруг нужен токен csrf для входа в систему? Вы

Вопрос:

Я несколько минут назад вошел в консоль администратора django. Я, должно быть, кое-что изменил, что вызвало эту ошибку при входе в систему как суперпользователь:

Запрещено (403)
Не удалось выполнить проверку CSRF. Запрос прерван.

Эта ошибка застала меня на страже, когда я вошел всю ночь. Зачем мне вдруг нужен токен csrf для входа в систему? Вы могли бы подумать, что знак в форме уже имеет это. Это мой admin.py:

from django.contrib import admin from accounts.models import Image, Category, UserProfile class ImageAdmin(admin.ModelAdmin): list_display = [«__unicode__», «title», «created»] admin.site.register(Image, GenericImageAdmin) class CategoryAdmin(admin.ModelAdmin): list_display = [«category»] admin.site.register(Category, CategoryAdmin) admin.site.register(UserProfile) Лучший ответ:

Для входа в систему администратора обычно требуется токен csrf, но обычно все заботятся о вас.

  1. Проверьте куки вашего браузера, чтобы увидеть, есть ли токен csrf
  2. Попробуйте очистить куки и обновить
  3. Убедитесь, что у вас есть промежуточное программное обеспечение django.middleware.csrf.CsrfViewMiddleware
  4. Убедитесь, что вы используете https или CSRF_COOKIE_SECURE=False (по умолчанию), в противном случае ваш файл csrf существует, но не будет отправлен. CSRF_COOKIE_SECURE куки после изменения CSRF_COOKIE_SECURE.

Ответ №1

Добавьте токен csrf в свой контекст в окне входа в систему, а в вашем шаблоне добавьте скрытый div для токена csrf. Убедитесь, что у вас есть django.middleware.csrf.CsrfViewMiddleware в разделе промежуточного программного обеспечения в файле settings.py.

Затем добавьте @csrf_protect к вашим представлениям, чтобы сделать с логином. Также возможно, что вы попытались войти в систему с неправильными учетными данными – вам нужно @csrf_protect в представлении выхода из вашего приложения views.py вы вызываете соответствующий uri для входа/выхода из системы и т.д. В urls.py. Мой выход просто вызывает выход из системы (запрос), а затем вызывает HttpResponseRedirect (”), который, вероятно, не идеален, но теперь он мне подходит для моих нужд.

Ответ №2

Эта ошибка появлялась для меня, когда я не устанавливал CSRF_COOKIE_DOMAIN в моих настройках_local, но был установлен в моем основном файле settings.py.

В моем случае я установил его на локальный хост, например

CSRF_COOKIE_DOMAIN = ‘127.0.0.1’ Ответ №3

В качестве меры безопасности у меня было CSRF_COOKIE_SECURE = True в моих настройках. Попытка войти в админ с помощью localhost, где нет HTTPS, была запрещена ошибка.

Установите его на False, чтобы заставить его работать с localhost

Ответ №4

Это также может произойти, если вы уже вошли на свой сайт, размещенный на URL-адресе, отличном от администратора. Затем попробуйте войти в свою панель администратора на новой вкладке.
Попробуйте открыть панель администратора в другом окне.

Ответ №5

Отключение проверки CSRF сработало для меня. Я знаю, что это не так надежно, как извлечение промежуточного программного обеспечения CSRF из вашего проекта, но это сработало для меня.

Вот как я это сделал:

Шаг 1. Создайте новое приложение в своем проекте и назовите его middle (именно так я его и назвал) с помощью python manage.py startapp middle

Шаг 2. Откройте файл “apps.py” в новой папке приложения и внесите соответствующие изменения, чтобы код был примерно таким:

from django.apps import AppConfig from django.utils.deprecation import MiddlewareMixin class MiddleConfig(AppConfig): name = ‘middle’ class DisableCSRF(MiddlewareMixin): def process_request(self, request): setattr(request, ‘_dont_enforce_csrf_checks’, True)

(Примечание: ваш первый вызов может отличаться в зависимости от того, как вы назвали свой проект)

Шаг 3. Удалите ‘django.middleware.csrf.CsrfViewMiddleware’ django.middleware.csrf.CsrfViewMiddleware” из списка MIDDLEWARE вашего файла settings.py в каталоге вашего проекта и добавьте еще одну запись в список MIDDLEWARE: ‘middle.apps.DisableCSRF’

(Примечание: используйте новое имя приложения вместо середины, если вы назвали новое приложение с другим именем)

Список MIDDLEWARE в вашем файле settings.py должен выглядеть примерно так:

MIDDLEWARE = [ ‘django.middleware.security.SecurityMiddleware’, ‘django.contrib.sessions.middleware.SessionMiddleware’, ‘django.middleware.common.CommonMiddleware’, # ‘django.middleware.csrf.CsrfViewMiddleware’, ‘middle.apps.DisableCSRF’, ‘django.contrib.auth.middleware.AuthenticationMiddleware’, ‘django.contrib.messages.middleware.MessageMiddleware’, ‘django.middleware.clickjacking.XFrameOptionsMiddleware’, ]

Я надеюсь, что это работает и для вас, ребята.

(см. этот пост для получения дополнительной информации об отключении проверки CSRF в django: как отключить проверку CSRF в Django ?)

Благодарю вас.

Оцените статью
Добавить комментарий