私はそれを正しくやっていると確信していましたが、疑いがあります。オプション/アイデアのAPIとしてのDjango + ReactJS - Redux:CSRFトークンを使用したPOSTリクエストですがCSRFトークンが設定されていません
私は、ユーザーがファイルをダウンロードできるように、基本クラスビュー内の1つのPOSTメソッドを除いて(私はいくつかのアセットのリクエストを取得するだけのような)APIとしてdjangoを使用しています。
問題は、djangoが私のPOSTにCSRFトークンを期待していることです。
だから、ここで私は私のreactjsから何をすべきかです:
export function sendData(endpoint, req, data) {
return dispatch => {
dispatch(requestData(data));
let csrfToken = Cookies.get('csrftoken');
return fetch(endpoint, {
method: req,
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': csrfToken,
},
body: JSON.stringify(data),
})
.then(checkStatus)
.then(reponse => {
console.log("Success!");
}).catch(err => {
err.response.json().then((json) =>{
let { Errors, Result } = json;
console.log('request failed: ', Errors, " ", Result);
});
});
};
};
ご覧のとおり、私は 'whatwg-fetch'ライブラリを使用しています。 私はX-CSRF-Token
でX-CSRFToken
を交換しようとしましたが、要求はクローム「オプション」にブロックされ、正しく送信されていないようです: Request header field x-csrf-token is not allowed by Access-Control-Allow-Headers in preflight response.
しかし、私はまだ私が読んでいるエラーを取得しますどこでも:
CSRFの確認に失敗しました。リクエストが中止されました。 失敗の理由: CSRF Cookieが設定されていません。
Urgh。
私はここで何が欠けていますか?私の見解では
私もこのデコレータのすべての種類を試してみた:
class DownloadAssetsView(ViewUrlMixin, ListView):
@csrf_exempt
def post(self, request, *args, **kwargs):
print(request)
return HttpResponse("coucou", status=200, content_type='application/json')
しかし、私はそれを動作させることはできません。..
PS:Djangoは私のクライアント側にレンダリングなしテンプレートを持っていません、まったく。
同じドメインにないとうまくいきません –
あなたの問題は解決しましたか? –
はい!クロスドメイン上にある場合は、リクエストブロックcsrfを投稿してください... –