36

まず、スタックからのすべての質問と CORS に関連するすべてを読みましたが、実装はまだ機能しません。私の APP はangular crud demoの上に構築されています:

だから私はアプリの設定に持っています:

$httpProvider.defaults.useXDomain = true;
$httpProvider.defaults.withCredentials = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];

そして、それらが正しく設定されていることを知っています(デバッグあり)。私の「セキュリティ」アプリでは、現在のユーザー、クロスドメインのリクエストを行っています:

return $http.get(LAYOUT_CONFIG.baseURL + '/current-user').then(function(response) {
      //service.currentUser = response.data.user;
      service.currentUser = response.data;
      return service.currentUser;
    });

最初のリクエストでこれらのヘッダーを取得します。

    Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:accept, origin, content-type, cookie
Access-Control-Allow-Methods:GET,POST
Access-Control-Allow-Origin:http://admin.vibetrace.com
Access-Control-Max-Age:1728000
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html; charset=utf-8
Date:Sun, 02 Jun 2013 11:07:49 GMT
P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
Server:nginx/1.1.19
Set-Cookie:vibetrace.ssid=s%3A2lT2_N0-EevCJt7LbRlJ6Az1.d8xp99st%2F0RNV0VN2D4o4AJXNRT%2F%2F46v8PDVWSAbx%2Fw; Path=/; Expires=Mon, 30 Sep 2013 11:07:49 GMT
Transfer-Encoding:chunked
Vary:Accept-Encoding
X-Cache:MISS
X-Powered-By:Express

そのため、Set-Cookie があります。ただし、後続の $http.get リクエスト (angular から) は、以前に設定されているはずの Cookie を送信しません。

Accept:application/json, text/plain, */*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Host:app.vibetrace.com
Origin:http://admin.vibetrace.com
Pragma:no-cache
Referer:http://admin.vibetrace.com/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36

しかし、ここに興味深い部分があります。コンソールで次のコードを実行すると:

$.ajax("https://app.vibetrace.com/current-user", {
            type: "GET",
            success: function(data, status, xhr) {               
            },
            xhrFields: {
                withCredentials: true
            },
            crossDomain: true
        });

リクエスト ヘッダーには Cookie が含まれています。

Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Cookie:fbm_245656478789760=base_domain=.vibetrace.com; __utma=199448574.828439508.1336934706.1361539088.1361819816.356; __utmc=199448574; __utmz=199448574.1361819816.356.354.utmcsr=tenlister.com|utmccn=(referral)|utmcmd=referral|utmcct=/index.php; connect.sid=s%3AZ1o9bIw0jBOmQwuhKJDG1San.%2BfshIsvupiRuK0pUJqm8EAMnMBCyxf%2Fk17cAVzcy31w; __utma=173003172.1796845739.1355503443.1369827921.1369833348.68; __utmc=173003172; __utmz=173003172.1369410587.66.5.utmcsr=stage.marketizator.com|utmccn=(referral)|utmcmd=referral|utmcct=/app/builder/; vibetrace.ssid=s%3AV6biojefu9r5DTGErKL5vYPi.KAlnWMUm8jZmPV0MpP%2FrgqwmkF6WuXEZZDyzJhozYCs
Host:app.vibetrace.com
Origin:http://admin.vibetrace.com
Pragma:no-cache
Referer:http://admin.vibetrace.com/

私は何が欠けていますか?

4

3 に答える 3

24

これを見たことがありますか?別のドメインにある AngularJS と Jersey Webservice 間の通信。正しいセッションにアクセスできません

withCredentials を指定する構成オブジェクトを $http に渡してみてください。これはすべてのバージョンで機能するはずです。

$http({withCredentials: true, ...}).get(...)

ここでの議論: https://github.com/angular/angular.js/pull/1209

于 2013-06-03T06:35:34.790 に答える
4

設定は機能するwithCredentials=trueはずですが、特に$ajax で機能する部分が厄介です問題はクライアントにあるのではなく、サーバーが送り返すものとテスト方法の組み合わせにあると私は信じています。

jQuery と Angular の両方を使用して同じパスでテストしていますか?

この問題は、サーバーから取得した Cookie に関連している可能性があります。パスが正しく設定されていない場合、ブラウザーはリクエストと共に Cookie を他のパスに送信しません。これは他のプロパティにも当てはまりますが、最も可能性が高いのはパスです。

これは Angular の構成とは関係ありませんが、それでも数時間遅れる可能性があります。

それ以外の唯一の可能性のある説明は、Angularの古いバージョンを使用しているということですが、質問の詳細と、私にはありそうにない他の回答へのリンクが与えられています。

于 2013-09-30T15:21:33.240 に答える