2013-06-12 16 views
65

私たちはAngularJSとJavaサーブレットを備えたRESTful Webサービスに取り組んでいます。 ユーザがログインすると、私たちのバックエンドは "Set-Cookie"ヘッダをフロントエンドに送ります。 Angularでは、$cookies(ngCookie - module)経由でヘッダにアクセスして設定します。 enter image description here

ユーザーがログインしたので、たとえば、いくつかのものを削除できます。したがって、フロントエンドはGET要求をバックエンドに送信します。

OPTIONS要求: OPTIONS request

GETリクエスト GET request

我々はいくつかのCORSヘッダを設定する必要が異なるドメインに取り組むと角度が実際のGET要求の前にOPTIONS要求を行うため、 $ httpモジュール経由でAngularでこれを行いますが、それはJSESSIONIDを含むクッキーを送信しません。

どのようにしてAngularがCookieを送信できるようにすることができますか?あなたの設定、DI $httpProvider

答えて

129

してからtrueにwithCredentialsを設定します。angularjs withCredentials上

.config(function ($httpProvider) { 
    $httpProvider.defaults.withCredentials = true; 
    //rest of route code 
}) 

はインフォメーション:http://docs.angularjs.org/api/ng.$http

Mozillaの記事へのリンク:https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control#section_5

+6

これとバックエンドヘッダーをAllow-Credentialsに設定すると問題が解決しました。ありがとう! –

+10

これを追加するだけで、ブラウザが '$ http.get( 'something'、{withCredentials:true})のような呼び出しをしたときに気づきました。しかし、上記のコードを使用して 'withCredentials'をデフォルトに追加することは、そのトリックを行いました。なぜ誰かがこの問題を横切って走っても、どうしてうまくいけばいいのか分かりません。 –

+0

これは私の人生を一層楽にしました、ありがとう。 – Seiyria

8
$http.get("URL", { withCredentials: true }) 
    .success(function(data, status, headers, config) {}) 
    .error(function(data, status, headers, config) {}); 

あなたが覚えておくべきもう一つのこと:サードパーティのクッキーを有効にする必要がある。 Chromeでグローバルに無効にしている場合は、ドメイン名の左側にある「i」記号をクリックしてからCookieをクリックし、「ブロック」してターゲットドメインのブロックを解除します。

+1

このアプローチはAngularJS2で私にとってはうまくいきました....しかし、私のソースコードを変更する前に作成したセッションが終了するまでは終了しませんでした。 – HDave

関連する問題