通过FB加载画布应用程序时出现内部错误,但不是直接

时间:2011-12-30 22:18:26

标签: django facebook canvas csrf django-facebook

我主要使用django作为网站应用。我需要编写一个画布页来处理请求。在最简单的形式中,我有:

(r'^canvas/','commitments.views.canvas'),
<{1>}中的

和:

urls.py
@csrf_exempt def canvas(request): return HttpResponse("Hello world") 中的

。如果我直接加载页面,这一切都正常。但是,如果我通过Facebook画布加载页面,则会收到与modsecurity views.py相关的错误。

对我在这里做错了什么的想法?谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

目前,我已经能够通过关闭mod_security(Dreamhost面板中的“额外网络安全性”)来处理它。

我试图通过以下.htaccess说明处理它,但它们似乎没有做到这一点:

SetEnvIfNoCase Request_URI ^/canvas/.*$ MODSEC_ENABLE=Off
<IfModule mod_security.c>
  SecFilterSelective REQUEST_URI "^/canvas/.*$" "allow,pass"
  SecFilterScanPOST Off
</IfModule>

我希望能够重新启用mod_security,除了允许画布URI通过,所以如果有人有解决方案,我将不胜感激。谢谢!

答案 1 :(得分:0)

(来自here的x-post:解决方案可能相同)

所以我花了太多时间试图解决这个问题。我已经确定了一个(略显蹩脚)的解决方法:将{% csrf_token %}添加到模板中的任何位置(我假设您已将context_instance=RequestContext(request)参数传递给render_to_response或其他任何地方)。

我认为正在发生的事情是cookie实际上并未设置(这可以通过检查任何浏览器的开发工具中的cookie来确认)。将上述代码添加到模板会强制执行此操作。我有一种感觉,这可能会在Django的更高版本中得到纠正,似乎有明显的1.4+修复(例如,见here)。不幸的是,dreamhost用1.2.3阻止了我们,所以我们需要做。