我正在使用Django项目。目的是从Facebook导入用户信息。首先,我使用facebook提供的注册社交插件。我有一个基本模板,其中包含注册插件的iframe;就像facebook api文档建议的那样。呈现此模板的视图如下:
def registration(request):
if (request.method == "POST"):
return HttpResponse("it posted!")
else:
return render_to_response("ui/registration.html", {},
context_instance=RequestContext(request))
当我按下插件上的注册并且facebook发送我的查看签名请求时,Django抱怨丢失的csrf令牌。我也尝试通过使用csrf(request)在上下文字典中传递它来明确地包含csrf-token,但是这仍然无法解决问题。我们将非常感谢您的快速反应。
答案 0 :(得分:3)
CSRF保护是为了防止跨站点帖子。但是,在这种情况下,您希望接受来自Facebook的帖子,因此您应该在视图上使用接受签名请求的csrf_exempt
装饰器。请参阅有关CSRF例外的部分:http://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#exceptions
答案 1 :(得分:1)
你需要为此做一些事情:
@csrf_exempt
装饰您的视图,例如Mark建议。或者,您可以编写自己的中间件来检查来自facebook的csrf令牌,而不是第2步和第3步。
答案 2 :(得分:1)
寻找fandjango应用程序,尤其是中间件。 https://github.com/jgorset/fandjango 这对我做了