2017-02-17 1 views
0

다음과 같은 상황이 있습니다.백엔드에서 보낸 쿠키가 프론트 엔드에 설정되지 않았습니다.

부 :

  • 로컬 호스트 : 3000
  • 로컬 호스트 (반작용) 프론트 엔드 : 8000 백엔드입니다 (장고) 나는 성공적인 도메인 간 GET을
  • 은 (내가 django- 사용하고 있습니다 CORS 헤더 패키지) 응답 헤더의

부 :

Set-Cookie: csrftoken=token; expires=Fri, 16-Feb-2018 10:56:00 GMT; Max-Age=31449600; Path=/ 
  • 제 3 자 쿠키 및 사이트 데이터를 허용하도록 설정되어 있지만 브라우저에 쿠키 csrftoken이 설정되어 있지 않습니다 (브라우저가 다른 도메인의 쿠키를 무시하기 때문에 브라우저에 설정된 경우). Chrome 설정)
  • POST 인해 설정되지 CSRF 쿠키에 실패

파트 II :

  • 나는 쿠키가 수동으로
  • 모든 것을 완벽
  • 01 일 설정 23,516,

이 내 아약스 요청입니다 :

초기 GET 후 쿠키를 읽고 브라우저에서 설정할 수있는 방법은
jQuery.ajaxSetup({ 
    beforeSend: function(xhr, settings) { 
    xhr.setRequestHeader("X-CSRFToken", csrftoken); 
    } 
}); 

jQuery.ajax({ 
    url: url, 
    type: 'POST', 
    data: {attr: value, csrfmiddlewaretoken: csrftoken}, 
    crossDomain: true, 
    xhrFields: { 
    withCredentials: true 
    } 
}) 

인가?

답변

1

최근 django와 angular 2를 사용하여 비슷한 문제가 발생했습니다. django-cors-headers 구성에 문제가있었습니다.

django-cors-headers 란 무엇입니까? 모두 허용 및 자격 증명을 동시에 설정할 수 없습니다.

은 허용되지 않습니다 :

CORS_ORIGIN_ALLOW_ALL = True 
CORS_ALLOW_CREDENTIALS = True 

대신 사용 :

CORS_ALLOW_CREDENTIALS = True 
CORS_ORIGIN_WHITELIST = (
    'localhost:3000', 
    '127.0.0.1:3000' 
) 

Set-Cookie response header not working using Angular 2 + django-rest-framework

+0

내가 CORS_ALLOW_CREDENTIALS = TRUE 및 CORS_ORIGIN_WHITELIST = (이 : '로컬 호스트 3000' '127.0.0.1을 : 3000 ')하지만 도움이되지 않습니다. – dnmh

+1

아, 알았어 ... 내 아약스 전화에서 이걸 가지고 있지 않았다. xhrFields : { withCredentials : true } – dnmh

관련 문제