Исходная ошибка:
[Sat Apr 27 13:52:46.386072 2019] [wsgi:error] [pid 15601:tid 140129939744512] [remote <ip-address-removed>] Forbidden (CSRF cookie not set.): /login/
Приложение, использующее стандартное представление входа в систему Django.
from .forms import UserLoginForm
path('login/', authviews.LoginView.as_view(authentication_form=UserLoginForm))
И форма представления входа в систему:
<form action="" method="post">
{% csrf_token %}
<div class="form-group has-feedback">
{{ form.username}}
</div>
<div class="form-group has-feedback">
{{ form.password}}
</div>
<div class="row">
<div class="col-8">
</div>
<!-- /.col -->
<div class="col-4">
<button type="submit" class="btn btn-primary btn-block btn-flat">Sign In</button>
</div>
<!-- /.col -->
</div>
</form>
Файл конфигурации виртуального хоста Apache:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName foo.example.edu.tr
ServerAdmin foo@example.edu.tr
DocumentRoot /home/<removed>/projects/abcpweb/production/ABCPWeb/webapp
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# WSGI configurations
Alias /media/ /home/<removed>/projects/abcpweb/production/ABCPWeb/media/
Alias /static/ /home/<removed>/projects/abcpweb/production/ABCPWeb/webapp/static/
<Directory /home/<removed>/projects/abcpweb/production/ABCPWeb/webapp/static>
Require all granted
</Directory>
<Directory /home/<removed>/projects/abcpweb/production/ABCPWeb/media>
Require all granted
</Directory>
WSGIDaemonProcess abcpweb python-home=/home/<removed>/projects/abcpweb/production/EnvABCPWebProd python-path=/home/<removed>/projects/abcpweb/product
ion/ABCPWeb:/home/<removed>/projects/abcpweb/production/EnvABCPWebProd/lib/python3.6/site-packages
WSGIProcessGroup abcpweb
WSGIScriptAlias / /home/<removed>/projects/abcpweb/production/ABCPWeb/ABCPWeb/wsgi.py process-group=abcpweb
WSGIPassAuthorization On
<Directory /home/<removed>/projects/abcpweb/production/ABCPWeb/ABCPWeb>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
</IfModule>
файл wsgi.py (я не удалил комментарии, чтобы показать, что я пробовал раньше):
import os, sys, django
sys.path.append('/home/<removed>/projects/abcpweb/production/ABCPWeb')
sys.path.append('/home/<removed>/projects/abcpweb/production/EnvABCPWebProd/lib/python3.6/site-packages')
from django.core.wsgi import get_wsgi_application
from django.core.handlers.wsgi import WSGIHandler
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ABCPWeb.settings")
#django.setup(set_prefix=False)
#from django.core.handlers.wsgi import WSGIHandler
#application = WSGIHandler()
application = get_wsgi_application()
Наконец, связанные частиsettings.py:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'api',
'webapp',
'django_celery_results',
'jsonify',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
#CSRF_COOKIE_SECURE = False
#SESSION_COOKIE_SECURE = False
#SECURE_SSL_REDIRECT = True
CSRF_COOKIE_DOMAIN = '.example.edu.tr'
SESSION_COOKIE_DOMAIN = '.example.edu.tr'
CSRF_TRUSTED_ORIGINS = ['foo.example.edu.tr', '.example.edu.tr']
ROOT_URLCONF = 'ABCPWeb.urls'
WSGI_APPLICATION = 'ABCPWeb.wsgi.application'
Я прочитал все вопросы об ошибке в Stackoverflow и других связанных платформах, но не смог ее решить.Я работаю над этим около 6 часов, но понятия не имею о появлении ошибки.
Эти ссылки содержат возможные решения, которые я пробовал:
- DjangoФайл cookie CSRF не установлен из Stackoverflow
- Решение для декоратора (Я не пробовал точно, потому что не хочу отключать защиту CSRF для всех представлений)
- Решение Заха (я не пробовал, потому что не хочу изменять файлы ядра django)
Проект работает на локальном компьютере без ошибки.Это происходит на этапе развертывания.Поэтому я думаю, что речь идет о конфигурации HTTPS или поддоменов (wsgi, apache).
ОБНОВЛЕНИЕ: Я решил проблему с добавлением строки (совместно используемой ниже) для ограничения встроенного режима для apache2.conf файл:
WSGIRestrictEmbedded On