私はlocalhost:8000にバックエンドサーバーを、localhost:3000にフロントエンドサーバーを持っています。バックエンドはDjangoです。私はcorsheadersパッケージをインストールしていますが、私は問題なしでGETリクエストを作成します。サイトを開くと、最初のGETリクエストでCSRFトークンが正常に設定されます(devツールでCookieを見ることができます)。Django CSRFクロスサイトAJAXの問題
私はsettings.pyでこれを持っている:
CORS_ORIGIN_WHITELIST = (
'localhost:3000'
)
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT'
)
CORS_ALLOW_HEADERS = (
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
)
CSRF_TRUSTED_ORIGINS = (
'localhost:3000',
)
CORS_ALLOW_CREDENTIALS = True
は、今私はPOSTリクエストを作成しようとしていると私は常にサーバによって断ってる:
403 - Forbidden (CSRF cookie not set.): /myapp/myview/
、これはあります私のJSの様子:
let csrftoken = utils.getCookie('csrftoken'); // logged this on the console, the token is really here
jQuery.ajaxSetup({
beforeSend: function(xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}); // this might be wrong - I did read it is used only if it's not cross site, but I still gave it a try
jQuery.ajax({
url: url,
type: 'POST',
data: {attr: value, csrfmiddlewaretoken: csrftoken}
})...
私はAJAXデータでcsrfmiddlewaretokenを使ってみました。私はリクエストヘッダを設定するだけで試しました。私は両方を試しました。まだ運がありません。私は明らかに何かが欠けている。私はこれまで、サイト間でDjangoでPOSTを試したことがありません。
提案がありますか?
編集:私は問題が他のところにあることを発見しました。
チェックこのhttps://github.com/ottoyiu/django-cors-headers –
@ PiyushS.Wanare私はすでにジャンゴ・CORS-ヘッダを使用していたが、今はCORS_ALLOW_HEADERS/METHODS、CSRF_TRUSTED_ORIGINSとして、私の設定を拡張しましたCORS_ALLOW_CREDENTIALS、それでも動作しません、私は同じエラーメッセージが表示されます。 – dnmh
問題は他の場所にあることが判明しましたか?あなたはその情報に向けて私たちを指摘したり、質問を終わらせることはできますか? – waterproof