2011-03-24 19 views
2

クライアントのfbページ用の単純なhtml-only facebookアプリケーションを作成しようとしています。私はdjangoのフラットページを使用してクライアントとスタッフがサイトのdjango管理者からアプリの内容を変更できるようにしたいと考えています。問題は、Djangoが403 "CSRF検証に失敗しました。要求が中止されました。" facebookが独自のPOST情報を送信してアプリのURLにアクセスしようとするとエラーが発生します。フラットページを使用して簡単なfacebookアプリを作成しましたが、signed_requestによるCSRFの問題

私はすでに@csrf_exemptデコレータについて知っていますが、django.contribコード内にあるので、フラットページビューにどのように適用するかはわかりません。さらに、ビューが特定のfacebook.htmlテンプレート(default.htmlテンプレートではない)を呼び出すよう要求されたときに、csrf保護を無効にしたいだけです。 {%crsf_exempt%}テンプレートタグが存在した場合、それは完璧です。

誰もこの問題を解決する方法を考えることができますか?または、私はFacebookのアプリを提供するために、django-flatpagesを使用するというアイデアをあきらめるべきでしょうか?

答えて

1

するFacebookで呼ばれている、あなたの意見で、このデコレータを使用してみてください:

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

これはそのビューにCSRFの保護を無効にします。 これは役に立ちますか?

+0

私はその問題を再公式化した。ありがとう – Marconius

+0

私の解決策を試しましたか?私はまったく同じ問題を抱えていた。 – pyeleven

+0

私はdjango_flatpagesを使ってfacebookを "キャンバス"にしたいと思っていますが、django.contribコードを使わずに@Crsf_exemptデコレータをflatpagesビューにどのように追加するのか分かりません。私がこれを理解できない場合、私はおそらく自分のdjangoアプリケーションを作成し、ビューメソッドであなたのソリューションを実装します。 – Marconius

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チェックを無効にする必要があります。

関連する問題