2

クライアントの fb ページ用のシンプルな html のみの Facebook アプリを作成しようとしています。クライアントとそのスタッフがサイトのdjango管理者からアプリのコンテンツを変更できるように、djangoのフラットページを使用したいと思います。問題は、Django が 403「CSRF 検証に失敗しました。リクエストは中止されました」を返すことです。Facebook が独自の POST 情報を送信してアプリの URL にアクセスしようとすると、エラーが発生します。

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

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

4

2 に答える 2

1

Facebookと呼ばれるビューでこのデコレータを使用してみてください。

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

これにより、そのビューでcsrf保護が無効になります。これは役に立ちますか?

于 2011-03-24T05:51:11.930 に答える
0

私はあなたとまったく同じ問題に遭遇しました。フラットページの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 チェックを無効にする必要があります。

于 2012-01-06T05:28:40.283 に答える