2017-01-26 10 views
0

私はそれを正しくやっていると確信していましたが、疑いがあります。オプション/アイデアの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-TokenX-CSRFTokenを交換しようとしましたが、要求はクローム「オプション」にブロックされ、正しく送信されていないようです: Request header field x-csrf-token is not allowed by Access-Control-Allow-Headers in preflight response.

しかし、私はまだ私が読んでいるエラーを取得しますどこでも:

CSRFの確認に失敗しました。リクエストが中止されました。 失敗の理由: CSRF Coo​​kieが設定されていません。

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は私のクライアント側にレンダリングなしテンプレートを持っていません、まったく。

答えて

1

私たちはこのプロジェクトでこの問題を抱えていました。csrfトークンが不明なトークンとリクエストをブロックするようにしました.csrfトークンについてのドキュメントが表示されていれば、csrfトークンがdjango server.weへの外部リクエストをブロックします私たちのdjango.it fixedプロジェクトへの反応プロジェクト。これは専門家ではないが、これを確認することができます。

+0

同じドメインにないとうまくいきません –

+0

あなたの問題は解決しましたか? –

+0

はい!クロスドメイン上にある場合は、リクエストブロックcsrfを投稿してください... –

関連する問題