2017-01-26 2 views
0

주위를 둘러 보았을 때 나는 올바르게하고 싶었지만 의심스럽고 최악의 상태로 시작했습니다. 옵션/아이디어.Django as API + ReactJS - Redux : CSRF 토큰을 사용한 POST 요청이지만 여전히 CSRF 토큰이 설정되지 않았습니다.

그래서 저는 사용자가 파일을 다운로드 할 수 있도록 기본 클래스 뷰 내에서 하나의 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 쿠키가 설정되지 않았습니다.

Urgh.

무엇이 여기에 있습니까? 장고 내 클라이언트 측에 렌더링에는 템플릿이 없습니다 :

PS는 ..

class DownloadAssetsView(ViewUrlMixin, ListView): 
    @csrf_exempt 
    def post(self, request, *args, **kwargs): 
     print(request) 
     return HttpResponse("coucou", status=200, content_type='application/json') 

하지만 그것은 작동 할 수 없습니다 :

내보기에

나는 장식의 모든 종류도이 시도했습니다 , 전혀.

답변

1

우리 프로젝트에서이 문제가있었습니다. csrf 토큰은 알 수없는 토큰과 요청을 차단하도록 만들어졌습니다. csrf 토큰에 대한 문서를 보면 csrf 토큰이 django server.we 병합에 대한 외부 요청을 차단합니다. 우리의 django.it fixed 프로젝트에 대한 반응 프로젝트. 이것에 대해서는 전문가가 아니지만 이것을 확인할 수 있습니다.

+0

동일한 도메인에 있지 않으면 작동하지 않습니다. –

+0

문제가 해결 되었습니까? –

+0

예! 게시 요청 블록 csrf가 교차 도메인에있는 경우 ... –

관련 문제