我正在尝试将我的项目从默认的django服务器切换到Apache,并通过域名获取我的网站,但是我收到了一条csrf 403消息,用于尝试登录django身份验证系统和作为管理员通过" mysite.com/admin"。在配置我的apache服务器之前,这些都在本地主机上工作。
我无法确定调试此操作的步骤,因为所有建议都会给出响应,例如设置" CSRF_COOKIE_HTTPONLY" to true和渲染RequestContext等,我已经为使CSRF auth工作在我的localhost上所做的一切。
我已经被困在这几天了,任何帮助都会深深感激。
Settings.py
MIDDLEWARE_CLASSES = (
'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',
'django.middleware.security.SecurityMiddleware',)
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
CSRF_COOKIE_HTTPONLY = True
AUTH_PROFILE_MODULE = "mysite.UserProfile"
示例views.py
def login(request):
c = {}
c.update(csrf(request))
username = request.POST.get('username','')
return render(request,'login.html',c)
Apache配置文件(000-default.conf)
<VirtualHost *:80>
ServerName mysite.com
Alias /static /var/www/mysite/static/static_root/
<Directory /var/www/mysite/static/static_root>
Require all granted
</Directory>
<Directory /var/www/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
ServerAdmin webmaster@mysite.com
Servername mysite.com
WSGIScriptAlias / /var/www/mysite/mysite/wsgi.py
WSGIDaemonProcess mysite.com python-path=/var/www:/usr/local/lib/python2.7/site-packages
WSGIProcessGroup mysite.com
我的模板上的所有表单操作都有{%csrf_token%} 我的所有文件(除配置文件外)都在/ var / www中,并且我已经获得755访问权限。
答案 0 :(得分:2)
您将CSRF_COOKIE_SECURE
设置为True
,这意味着您的CSRF Cookie将仅限HTTPS(即您的浏览器只会通过HTTPS连接发送Cookie)。
但是,您的站点是通过HTTP提供的(事实证明,您的Apache配置中没有SSL指令)。
通过HTTPS投放您的网站,或将CSRF_COOKIE_SECURE
保留为其默认值(False
)。