私はこれについて多くを見てきましたが、何も問題を解決できません。Django 1.9 AJAXフォームCSRFトークン403エラー - 「CSRFクッキーが設定されていません」
問題:有効CSRFミドルウェアで
、Djangoは述べ、AJAXフォーム要求に403で応答: "CSRFクッキー設定されていません"
を
documentation後、JSの機能は、カスタム"X-CSRFToken"ヘッダーを設定している、実装されました。
また、期待どおりに動作AJAX要求とともにブラウザやポストそれをから"csrftoken"クッキーを取得します。
x-csrftoken: 1a0u7GCQG0wepZHQNThIXeYpMy2lZOf2
しかし応答はまだ403
しようとしたソリューションです:
私はSOやウェブ上で見つけられるものをすべて試しました。具体的には
そのミドルウェアが有効になっているチェック:有効にクッキーと
MIDDLEWARE_CLASSES = [ ... 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', ... ]
異なるブラウザを。
@ensure_csrf_cookie
で私の意見を飾る;テンプレートに
{% csrf_token %}
を設定してください。右の要求コンテキストを取る
render
ショートカットを使用する。私
settings.py
でカスタムCSRF_COOKIE_NAME
とCSRF_HEADER_NAME
を設定します。CSRF_COOKIE_SECURE = False
とCSRF_COOKIE_HTTPONLY = False
を明示的に設定します。CSRF_TRUSTED_ORIGINS
の設定を明示的に設定します。開発サーバーと運用サーバーのテスト。
でも、私の考えでは、誰かが示唆したように、
request.META["CSRF_COOKIE_USED"] = True
です。
まだ何も得られていません。
ヘッダ:
私は私の見解で@csrf_exempt
とprint(request.META)
を使用する場合は、カスタムヘッダ「X-CSRFToken」がリクエストに存在し、「HTTP_」接頭辞で、Djangoのドキュメントに従ってフォーマットであることは明らかですハイフンをアンダースコアに置き換え、すべて大文字:"HTTP_X_CSRFTOKEN"。
さらに、Djangoによって設定されたクッキーと一致します。
クッキー:私は私の見解でprint(request.COOKIES)
にしようとした場合
奇妙なことは、私は「csrftoken」がクッキーを見ることができるページとフォーム負荷に、ですが、辞書はAJAX要求に空であります。問題になることはありますか?
実際に何が間違っているのが見逃せません。これを読んでいただきありがとうございます。 [OK]を
):
そして、あなたが行ってもいいでしょう:あなたは自分のfetch()
関数の引数にsame-origin
を追加する必要がありますか? – AlasdairあなたはAJAXリクエストを送信するために何を使用していますか? jQuery? – Smile0ff
@ Smile0ff:APIを取得します。 – Nevertheless