2011-03-24 15 views
2

我正在嘗試爲客戶端的fb頁創建一個簡單的,僅支持html的facebook應用程序。我想使用django的flatpages,以便客戶和他的員工可以通過他們網站的django管理員更改應用程序的內容。問題是Django返回403「CSRF驗證失敗,請求中止。」當Facebook嘗試發送自己的POST信息並訪問該應用的網址時出錯。使用flatpages創建一個簡單的Facebook應用程序,但由signed_request造成的CSRF問題

我已經知道@csrf_exempt裝飾器,但我不知道如何將它應用到flatpage視圖,因爲它在django.contrib代碼中。此外,我只想在視圖被要求調用特定的facebook.html模板(而不是default.html模板)時禁用csrf保護。例如,如果碰巧有一個{%crsf_exempt%}模板標籤,那將是完美的。

任何人都可以想出一種方法來解決這個問題?或者,也許我應該放棄使用django-flatpages服務Facebook應用程序的想法?

回答

1

嘗試使用您的看法這個裝飾被稱爲Facebook的:

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

這將在該視圖上禁用CSRF保護。 這有幫助嗎?

+0

不完全。我重新提出了這個問題。謝謝 – Marconius 2011-03-24 14:39:26

+0

您是否嘗試過我的解決方案?我有這個完全相同的問題。 – pyeleven 2011-03-24 14:44:57

+0

的事情是,我想用django_flatpages來製作Facebook的「畫布」,但我不知道如何將@Crsf_exempt修飾器添加到flatpages視圖而不會與django.contrib代碼搞混。如果我無法弄清楚,我可能只會製作我自己的django應用程序,並在其視圖方法上實施您的解決方案。 – Marconius 2011-03-24 16:11:30

0

我遇到了與您完全相同的問題。我想魔鬼CSRF爲的flatpages(但不包括該網站的其餘部分),並結束了與下列中間件:

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檢查只要有一個簡單頁面。

相關問題