未设置Apache Django CSRF 403 cookie

时间:2015-09-07 16:56:05

标签: django apache cookies django-admin django-csrf

我正在尝试将我的项目从默认的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访问权限。

1 个答案:

答案 0 :(得分:2)

您将CSRF_COOKIE_SECURE设置为True,这意味着您的CSRF Coo​​kie将仅限HTTPS(即您的浏览器只会通过HTTPS连接发送Cookie)。

但是,您的站点是通过HTTP提供的(事实证明,您的Apache配置中没有SSL指令)。

通过HTTPS投放您的网站,或将CSRF_COOKIE_SECURE保留为其默认值(False)。