8

Django 1.2.2 を実行していますが、Django 管理者にログインしようとすると、次のエラーが表示されます。

禁止 (403) CSRF 検証に失敗しました。リクエストは中止されました。

失敗の理由:

CSRF またはセッション cookie はありません。

** ベアボーン管理者に対してカスタマイズを行っていません。ソースを調べると、正しい場所であると思われるフォームに CSRF トークンがあります。

送信されている実際のリクエストを見ると、csrf トークンが送信されていますが、Django はまだ CSRF 検証に失敗したと言います。

誰かが私を正しい方向に向けることができますか? なぜこうなった?

4

3 に答える 3

6

Django 1.2.1 FINAL でも同じ問題が発生しました。本番サイトの Django が 1.0 から (さまざまな理由で) 更新されることはないとわかっていたので、回避策を見つけて、settings.py の開発バージョンに実装し、本番環境の settings.py はそのままにしました。

次のコードを使用して、アプリケーション ディレクトリにmiddleware.pyファイルを作成します。

class disableCSRF:
    def process_request(self, request):
        setattr(request, '_dont_enforce_csrf_checks', True)
        return None

次に、開発バージョンの settings.py で、これを MIDDLEWARE_CLASSES に挿入します。

'your_app_name.middleware.disableCSRF',

おそらく最も安全な解決策ではありませんが、Django サイトは完全に内部的なものであるため、あらゆる種類の悪意のあるアクションのリスクは最小限です。このソリューションはシンプルで、テンプレート/ビューの変更を必要とせず、すぐに機能しました (私が試した他のソリューションとは異なります)。

うまくいけば、私と同じような状況にある誰かがこれを役に立つと思うでしょう.

クレジットは、私がこれを見つけたサイトで John McCollum に送られます。

于 2010-12-14T16:59:28.387 に答える
5

1) 持っ'django.middleware.csrf.CsrfViewMiddleware'ていますsettings.MIDDLEWARE_CLASSESか?

2) 常に 1.2.2 を使用していますか? 昨夜出たばかりなのに…

于 2010-09-09T15:58:48.490 に答える
1

docsによると、csrf 隠しフォーム フィールドだけでなく、csrftokenCookie も必要です。提供されたエラー メッセージは、Cookie が見つからないことも示唆しています。

ブラウザの Cookie を調べて、csrftokenCookie が存在することを確認します。

于 2010-09-09T21:08:07.597 に答える