2011-01-25 9 views
2

プロキシの背後にあるDjangoシステム(Alfredと呼ぶ)を実行する必要があります。どちらも同じネットワーク上にあります。プロキシとして、私はyuri vandermeerのdjango-httpproxyを使用します。両方のシステムは、両方のシステムが同じ(クローズ)ネットワークでも同じIP上にあるDjangoのバージョン1.2.4プロキシの背後でDjangoのCSRF保護を無効にする方法

を実行している

を(自分のページyvandermeer.netを参照してください)。私は、プロキシをポート8000​​とポート1337のAlfredで実行しています。彼/ adminサイトを使ってAlfredにログオンする必要があります。これはデフォルトでDjango(そして私が有効にしたもの)です。これはポート1337を介して動作していますが、ポート8000​​経由でアクセスする必要があります。

私が試してみると、Alfredは403 CSRF Errorを投げていて、私は本当にman-in-the-ミドル( - アルフレッドはそう言っている時に完全に正しい)。

私はAlfreds CSRF保護を無効にするには、いくつかのことを試してみました:

  1. 私はdisable.pyを作成したとミドルウェアへのdisableCSRFクラスを追加MIDDLEWARE_CLASSES
  2. でsettings.pyにCsrfViewMiddlewareをコメントアウトクラス(実際、私はそれぞれを試してみました[!]の位置)は、このサイト上で述べたように(質問/ 1785772)

    #disable.py 
    class DisableCSRF(object): 
        def process_request(self, request): 
         setattr(request, '_dont_enforce_csrf_checks', True)
  3. 私はdisable.pyを作成し、そのdisableCSを追加しましたここでは、この他の記事で述べたようにミドルウェアのクラスへのRFクラスが(再び、私はそれぞれの位置を試してみました):http://hi.baidu.com/ledzep2/blog/item/e6b1612e21884c5c4ec2267a.html

    #disable.py 
    class DisableCSRF(object): 
        def process_view(self, request, callback, callback_args, callback_kwargs): 
         setattr(request, '_dont_enforce_csrf_checks', True)
  4. を私はジャンゴ/ミドルウェア/ csrf.pyでCSFR保護メカニズムをコメントアウトしようとしましたが、私が見つけましたこのサイトで言及されているように、ライン190の周りの関連する部分は、このサイトで言及された160の周りにはありません:質問/ 1650941/

上記の事柄はどれもうまくいきませんでした。私は/ admin経由でログオンしようとすると、常に403エラーが発生する

AlfredでCSRF保護を無効にするにはどうすればよいですか?/adminのためにそれを無効にすることは可能ですか?私は、2と3で述べたようなミドルウェアでこれを行うことができ、4のようなソースで何かをコメントするのではなく、私が好むと思う。ミドルウェアのような方法があれば、それは素晴らしいだろう。

ありがとうございます! :)

答えて

0

障害はすべて私の側にありました。サーバのログを調べることで、私はAlfredがエラーを投げているのではなく、プロキシ(django-httpproxy)を投げていることに気付きました。おそらく、両方のサーバがlocalhost上で動作しているので、localhostからの要求も送信しています。プロキシとアルフレッドのCSRFを無効にしました。 この設定では、私はもう403エラーを取得しません。

残念ながら、django-httpproxyはCookieを失います。そのため、私はログインできません。

教訓:リバースプロキシとしてdjango-httpproxyを使用しないでください。

+0

[djproxy](https://github.com/thomasw/djproxy)がおそらくあなたのためのより良い選択肢です。クッキー情報を失うことはなく、設定と使用が簡単です。 – Thomas

3

ビュー機能で@csrf_exemptデコレータを使用して、そのビューのcsrfを無効にすることができます。
documentationを参照してください。

+0

私は本当にdjango.contribのコードを変更したくありません。それの後ろのシステムでの認証、それはオプションではありません。 – gessulat

関連する問題