2017-04-05 1 views
0

브라우저에서 응답 쿠키 (csrftoken + seesionid)를 무시합니다. document.cookie()은 빈 문자열과 크롬 개발자 도구를 반환합니다. this site has no cookies쿠키가 설정된 쿠키 응답 헤더를 받았을 때도 쿠키가 기록되지 않습니다.

어떻게 해결할 수 있습니까?

FRONT : 각도 2 (로컬 호스트 : 4200)

돌아 가기 : 장고/DRF (로컬 호스트 : 8000)

로그인 경로 : [포스트]/로그인

응답 헤더 :

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Origin:http://localhost:4200 
Allow:POST, OPTIONS 
Date:Wed, 05 Apr 2017 07:38:24 GMT 
Server:WSGIServer/0.2 CPython/3.5.2 
Set-Cookie:sessionid=d5v1mri12bniyvyqqt55ar8mfl9mr2jk; expires=Wed, 19-Apr-2017 07:38:24 GMT; HttpOnly; Max-Age=1209600; Path=/ 
Set-Cookie:csrftoken=5PcTF8aQ1O79gdrylZcGchnmKyRy6zwS3kL2jR5dY2CMdjPfEYyhkoJjOzsDZuvj; expires=Wed, 04-Apr-2018 07:38:24 GMT; Max-Age=31449600; Path=/ 
Vary:Accept, Cookie, Origin 
X-Frame-Options:SAMEORIGIN 

요청 헤더 :

Accept:application/json, text/plain, */* 
Accept-Encoding:gzip, deflate, br 
Accept-Language:en-US,en;q=0.8,fr;q=0.6 
Connection:keep-alive 
Content-Length:51 
content-type:application/json 
Cookie:sessionid=d5v1mri12bniyvyqqt55ar8mfl9mr2jk; csrftoken=sml3uocRIeiB3KfHSnNkJXBJn3QAFN3p7lLtdvhrALgUwoVnfNjGM5PIy2L3UHls 
Host:127.0.0.1:8000 
Origin:http://localhost:4200 
Referer:http://localhost:4200/ 
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/56.0.2924.76 Chrome/56.0.2924.76 Safari/537.36 

답변

1

쿠키는 호스트 (귀하의 경우 로컬 호스트)의 서로 다른 포트들 사이에서 공유되지 않습니다. 브라우저는 localhost : 4200의 컨텐츠를 보여 주지만 쿠키는 localhost : 8000으로 설정됩니다. 두 번째 목록 인 "요청 헤더"에서 볼 수있는 것처럼 올바르게 설정되고 사용됩니다. 따라서 브라우저에서 해당 URL을 보려면 localhost : 8000에서 URL을 열어야합니다. 그렇더라도 sessionid는 "HttpOnly"로 표시되어 document.cookie()에 나열되지 않습니다 (JavaScript에서는 사용할 수 없음).

+0

좋아, 내가 (에서 : 4200)에 액세스 할 필요가 csrftoken에 대해 무엇을 사용하여 자바 스크립트 다음 요청 헤더에 포함 시키려면 이것이 가능합니까? –

+0

쿠키는 자동으로 요청에 포함되므로 스크립트에서 액세스 할 필요가 없습니다. 요청 로그를 확인하십시오 - csrftoken 쿠키가 여기에 포함되어 있습니다. –

+0

요청 헤더 (쿠키가 아닌)로 CSRF 토큰을 추가하려면 이렇게해야합니다. 이것이 csrf prevension이 작동하는 방법입니다. 헤더 키는 "X-CSRFToken"이라고 불리고 내 경우에는 장고가 403 "missing csrf token 또는 incorrect"로 응답하도록합니다. –

0

각도 cli를 사용하는 경우 프록시를 설정할 수 있습니다. proxy.conf.json의

ng serve --proxy-config proxy.conf.json

샘플 { "/api": { "target": "http://localhost:3000", "secure": false } }

또는 지역 개발 사용 seesionid에 대한 https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi

+0

프로덕션 서버는 어떻게됩니까? –

+0

CORS와 동일한 도메인에서 호스트하는 경우 문제가되지 않습니다. 다른 도메인을 사용하면 cors가 작동합니다. 그것은 크롬 기능/로컬 호스트 포트에 CORS를 허용하지 않는 버그입니다 –

+0

확장 표시 오류 와일드 "*".... 허용하지 않는 크롬 특정 문제입니까? 파이어 폭스와 똑같은가요? 각도 1은 무엇인가요? 각도 1 프로젝트가 있습니다.이 모든 것이 없으면 멋지게 작동합니다. –