2017-04-05 7 views
0

ブラウザは応答クッキー(csrftoken + seesionid)を無視しています。 document.cookie()は空の文字列とクロム開発ツールを返しますthis site has no cookiesクッキー設定の応答ヘッダーを受信して​​もクッキーが書き込まれない

解決方法

FRONT:角度2(localhostを:4200)

戻る:ジャンゴ/ DRF(localhostを: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)の異なるポート間で共有されていません。ブラウザーにはlocalhost:4200のコンテンツが表示されますが、クッキーはlocalhost:8000に設定されています。 2番目の「Request header」というリストにあるように、これらは正しく設定され使用されます。したがって、ブラウザでそれらを見るには、localhost:8000からURLを開く必要があります。それでも、セッションIDはdocument.cookie()には "HttpOnly"とマークされているので(JavaScriptでは利用できない)、リストされません。

+0

、csrftokenについて私は(から:4200)、それをアクセスするために何が必要なJavaScriptを使用して次のリクエストヘッダーに含めることは可能ですか? –

+0

クッキーは自動的にリクエストに含まれるため、スクリプトでアクセスする必要はありません。あなたのリクエストログを見てください - そこにはcsrftokenのクッキーが含まれています。 –

+0

リクエストのヘッダー(クッキーではない)としてCSRFトークンを追加するには、これを行う必要があります。これがcsrf prevensionの仕組みです。ヘッダーキーは "X-CSRFToken"と呼ばれ、私のケースでは空であり、djangoは403 "csrfトークンが見つからないか間違っている"と答えます。 –

0

あなたがangle cliを使用している場合は、プロキシを設定できます。

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

seesionidためのOK proxy.conf.jsonのサンプル { "/api": { "target": "http://localhost:3000", "secure": false } }

またはローカルの開発利用 https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi

+0

プロダクションサーバはどうですか? –

+0

CORSと同じドメインでホストする場合は問題ありません。別のドメインを使用すると、corsが機能します。それはローカルホストのポートでCORSを許可しないクロムの機能性/バグです –

+0

拡張子はエラーを表示します。ワイルド "*" ....を許可しません、それはクロム固有の問題ですか?それはFirefoxと同じですか?私はAngular 1プロジェクトを持っていますが、これはすべて役に立ちません。 –

関連する問題