2011-06-17 40 views
2

我在我的开发服务器上的工作没有问题,当我在生产服务器上试了一下,在一个真正的名字,而不是本地主机也不IP,我得到:Django的CSRF在生产服务器发生故障

Forbidden (403) 

CSRF verification failed. Request aborted. 
Help 

Reason given for failure: 

    CSRF cookie not set. 

我通过jQuery发送我的帖子,使用JavaScript修复后的方法和所有...

不知道还有什么可以做...任何人都可以给我一只手?

非常感谢!

回答

1

Cookie未设置通常意味着您没有add the csrf middleware。将其添加到您的生产部署的相关设置模块中。您还需要确保接收视图在通过javascript使用时有效。

您有两种选择。将服务器上的视图标记为csrf_exempt,或者您需要在请求中包含csrf标记。 csrf标记可用于任何模板,如{% csrf_token %}。我会做后者。

要在请求中包含csrf标记,只需将它作为POST变量csrf_token传递即可。你可以只是有一个片段在这样一个模板:

<script type="text/javascript"> 
    var csrf_token = '{% csrf_token %}'; 
</script> 

而且无论你正在做的请求,只是添加"csrf_token": csrf_token,到后的数据。