주위를 둘러 보았을 때 나는 올바르게하고 싶었지만 의심스럽고 최악의 상태로 시작했습니다. 옵션/아이디어.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')
하지만 그것은 작동 할 수 없습니다 :
내보기에나는 장식의 모든 종류도이 시도했습니다 , 전혀.
동일한 도메인에 있지 않으면 작동하지 않습니다. –
문제가 해결 되었습니까? –
예! 게시 요청 블록 csrf가 교차 도메인에있는 경우 ... –