使用flatpages创建一个简单的Facebook应用程序,但由signed_request引起的CSRF问题

时间:2011-03-24 04:55:35

标签: django facebook csrf django-flatpages

我正在尝试为客户端的fb页面创建一个简单的,仅限HTML的Facebook应用程序。我想使用django的flatpages,以便客户和他的员工可以通过他们网站的django管理员更改应用程序的内容。问题是Django返回403“CSRF验证失败。请求中止。”当facebook尝试发送自己的POST信息并访问该应用的网址时出错。

我已经了解了@csrf_exempt装饰器,但我不确定如何将它应用于平面视图,因为它位于django.contrib代码中。此外,我只想在视图被要求调用特定的facebook.html模板(而不是default.html模板)时禁用csrf保护。例如,恰好有{%crsf_exempt%}模板标签,那将是完美的。

有人能想出解决这个问题的方法吗?或者也许我应该放弃使用django-flatpages来为facebook应用程序提供服务的想法?

2 个答案:

答案 0 :(得分:1)

尝试在名为facebook的视图上使用此装饰器:

from django.views.decorators.csrf import csrf_exempt
@csrf_exempt

这将禁用该视图上的csrf保护。 这有帮助吗?

答案 1 :(得分:0)

我遇到了和你一样的问题。我想为flatpages(而不是网站的其余部分)播放csrf,最​​后得到以下中间件:

class DisableCSRFOnFlatPages(object):
    def process_request(self, request):
        try:
            FlatPage.objects.get(url=request.META.get('PATH_INFO'))
            setattr(request, '_dont_enforce_csrf_checks', True)
        except FlatPage.DoesNotExist:
            return

将其添加到您的设置中,只要有平面页,就应该禁用csrf检查。