2016-01-28 15 views
11

私はAngular2でputリクエストを作成すると、応答に予想されるセットクッキーを受け取ります。しかし、私のブラウザ(ChromeとFirefoxの両方を試してみました)はクッキーの設定を拒否しています。応答のセットクッキーがAngular2投稿要求のために設定されていません

代わりに同じ APIエンドポイントを呼び出すAngular 1アプリを使用すると、Cookieが正しく設定されます。

レスポンスヘッダは以下のとおりです。

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Origin:http://example.com 
Allow:GET, PUT, HEAD, OPTIONS 
Content-Type:application/json 
Date:Thu, 28 Jan 2016 14:41:38 GMT 
P3P:policyref="http://www.example.com/p3p.xml", CP="NON DSP COR CURa TIA" 
Server:WSGIServer/0.1 Python/2.7.6 
Set-Cookie:sessionid=994wl49qfsizog5bqmt57sgx9q2toa25; expires=Mon, 28-Mar-2016 14:41:37 GMT; Max-Age=5183999; Path=/ 
Set-Cookie:csrf=u7UQhpAphTsGYKRU6jFlLFt6NoYAhNMS; Domain=api.example.com; expires=Thu, 26-Jan-2017 14:41:38 GMT; Max-Age=31449600; Path=/ 
Vary:Accept, Cookie 

バックエンドはDjangoの1.8にプログラムされています。

この問題を解決する方法は誰でも同じことを経験したことがありますか?

答えて

10

私はCORS関連の問題のようです。おそらく、HTTP要求を実行するときにwithCredentials属性を設定しようとする可能性があります。

この回答は特にCedric Exbrayatの答え、それを行う方法を見つけるためにあなたを助けることができる:あなたはBrowserXhrを拡張することができ

編集

@Injectable() 
export class CustomBrowserXhr extends BrowserXhr { 
    constructor() {} 
    build(): any { 
    let xhr = super.build(); 
    xhr.withCredentials = true; 
    return <any>(xhr); 
    } 
} 

と拡張とBrowserXhrプロバイダ上書き:http://restlet.com/blog/2015/12/15/understanding-and-using-cors/

bootstrap(AppComponent, [ 
    HTTP_PROVIDERS, 
    provide(BrowserXhr, { useClass: CustomBrowserXhr }) 
]); 

をあなたがCORSの詳細ヒントが必要な場合は、このリンクを見ている可能性があります。

は確かにCORSの問題 ティエリー

+0

ありがとう!しかし私にとっては、Cedricのコードをどこに入れなければならないのかはあまり明確ではありません:) –

+0

セドリックのコードは 'bootstrap'関数の呼び出しの前に置かなければならないと思います。私はまたあなたには別の方法を提供する必要がありますが、私はそれをテストしませんでした... –

+0

私は私のAPIサービスのコンストラクタに入れて終了しました。ありがとう! :) –

19

、それはあなたのお役に立てば幸いです。上Angular2 RC2から は、あなただけの

this.http.get('http://my.domain.com/request', { withCredentials: true }) 
+1

対応する角度2文書:https://angular.io/docs/ts/latest/api/http/index/RequestOptions-class.html – haja

0

に必要私は同じ問題を抱えていたが、私のためにクッキーだから、このパスにのみリクエストがクッキーを含ま..「/ API /オーダー」へのパスを持っていました。..私は '/'への道を変え、今では永遠に...。