Вопрос:
Я несколько минут назад вошел в консоль администратора 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, но обычно все заботятся о вас.
- Проверьте куки вашего браузера, чтобы увидеть, есть ли токен csrf
- Попробуйте очистить куки и обновить
- Убедитесь, что у вас есть промежуточное программное обеспечение django.middleware.csrf.CsrfViewMiddleware
- Убедитесь, что вы используете 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 ?)
Благодарю вас.