2016-01-07 3 views
5

Я обновил Django с 1,8 до 1,9. Впоследствии я получаю эту ошибку на своем локальном хосте после входа администратора admin:Ошибка CSRF Не удалось - референт небезопасен, а хост защищен

Referer checking failed - Referer is insecure while host is secure.

Все работает отлично в производстве. Ниже приведен фрагмент моего settings.py файла:

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') 
SESSION_COOKIE_SECURE = True 
CSRF_COOKIE_SECURE = True 
+0

Я предполагаю, что вы используете 'http' в разработке. поэтому приложение должно быть настроено для использования 'http' в вашем' local.py' (или аналогичном). – sobolevn

ответ

2

Эти строки в файле settings.py хороши на производстве, потому что вы используете сертификат SSL, прикрепленный к вашему домену. Однако на местном уровне вы, вероятно, используете http://localhost:8000 или что-то подобное. Если вы попытаетесь подключиться через https://localhost:{{YOUR_PORT_NUMBER}}, скорее всего, получите сообщение об ошибке ERR_SSL_PROTOCOL_ERROR.

Вопрос находится в строках 167-168 от django/django/middleware/csrf.py. Когда вы используете https на производстве, request.is_secure() возвращает True ..., который требует, чтобы HTTP_REFERER также был правдой, или вы получите сообщение об ошибке, на которую вы ссылались.

Одним из решений будет adjust your settings.py file depending on whether you're in your local or production environment. Таким образом вы можете добавить эти три строки в файл settings_production.py, который импортирует другие параметры, которые являются общими для localhost и вашего производственного сервера. Ваш localhost будет использовать другой набор параметров, которые не включают эти строки.

+0

Да. Я понимаю. перед теми строками, которые я указал в моем вопросе, есть это условие: 'if not ENVIRONMENT == 'localhost''. Значение тех строк, которые я указал в моем вопросе, выполняется только в процессе производства. Итак, что мне нужно добавить к моим настройкам, чтобы предотвратить эту ошибку? – Farcorn

+0

Просто, чтобы проверить, если вы полностью удалите эти три строки, сайт работает на 'localhost'? Какая ошибка возникает тогда? Проблема в том, что ваш метатег 'HTTP_REFERER' не использует' https' на 'localhost'. См. Строки 167-168 из ['django/django/middleware/csrf.py'] (https://github.com/django/django/blob/master/django/middleware/csrf.py) – YPCrumble

+0

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