Ajax POST リクエストによる Django CSRF チェックの失敗
概要:
Django はビルドされた-クロスサイト リクエスト フォージェリ (CSRF) 攻撃から保護するメカニズム。ただし、この保護は AJAX POST リクエストに干渉する場合があります。この記事では、この問題について説明し、解決策を示します。
問題:
Django の CSRF が原因で、Django ビューへの AJAX POST リクエストが 403 Forbidden エラーで失敗する場合がある保護。このエラーは、リクエスト内の CSRF トークンが Django によって生成されたものと一致しない場合に発生します。
原因:
Ajax リクエスト (JavaScript を使用) は、リクエストヘッダーに CSRF トークンが含まれているため、CSRF チェックが失敗します。 Django.
解決策:
この問題を解決するには、CSRF トークンを Ajax リクエストのデータ本体に手動で追加します。これは、data プロパティを指定した $.ajax 関数を使用して実行できます。
$.ajax({ data: { somedata: 'somedata', moredata: 'moredata', csrfmiddlewaretoken: '{{ csrf_token }}' }, ... // other Ajax options });
Verification:
トークンが正しいことを確認するには、 Ajax リクエストを行う前に csrfmiddlewaretoken Cookie の値を確認します。この Cookie には csrf トークンが含まれています。
代替:
元の質問で述べたように、csrf_exempt デコレータを使用してビューの CSRF チェックを無効にすることは理想的なアプローチではありません。 CSRF 保護メカニズムに確実に準拠することをお勧めします。
以上がAJAX POST リクエストが Django CSRF チェックで失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。