2013-06-02 10 views
35

Przede wszystkim chcę powiedzieć, że przeczytałem wszystkie pytania ze Sterty i wszystko, co dotyczyło CORS, ale implementacja nadal nie działa. Moja aplikacja jest zbudowany na szczycie angular crud demo:Żądanie http nie wysyła ciasteczek w domenie w kątowym CORS

Więc mam w app config:

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

i wiem, że są prawidłowo ustawione (debugowania). W moim „Zabezpieczenia” aplikacji robię żądanie dla bieżącego użytkownika, cross-domain:

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

uzyskać te nagłówki na pierwsze żądanie:

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 

Więc Set-Cookie jest tam . Jednak kolejne żądanie $ http.get (z kątowego) nie wysyła pliku cookie, który powinien być wcześniej ustawiony.

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 

ale tu pojawia się interesująca część. Jeśli uruchomię następujący kod w konsoli:

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

nagłówek żądania zawiera pliki 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/ 

Czego mi brakuje?

+0

Twój config pracował forme, rzeczywista różnica widzę tutaj jest to, że jestem obsługi metoda żądania "OPCJE" plus nagłówki zezwalające: res.header ("Access-Control-Allow-Headers", "X-Requested-With, X-HTTP-metoda-Override, Content-Type, Accept, Authorization"); – porfiriopartida

Odpowiedz

24

Widziałeś to? Communication between AngularJS and a Jersey Webservice which are on a different domain. Can't access correct session

Spróbuj przekazać obiekt konfiguracyjny do $ http, który określa withCredentials, który powinien działać we wszystkich wersjach.

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

a dyskusja tutaj: https://github.com/angular/angular.js/pull/1209

+0

Myślę, że OP wykonał swoją pracę domową i musi coś jeszcze pójść nie tak. Nie jestem pewien co, szczegóły jquery są dziwne. – iwein

4

Ustawianie withCredentials=true powinny działać, a zwłaszcza część, gdzie działa z $ ajax jest dokuczliwy. To prowadzi mnie do przekonania, że ​​problem nie leży w kliencie, ale w połączeniu z tym, co serwer odsyła i jak go testujesz.

Czy na pewno testujesz na tej samej ścieżce zarówno w jQuery, jak i Angular?

Problem może być związany z plikiem cookie, który otrzymasz z serwera. Jeśli ścieżka nie jest ustawiona poprawnie, przeglądarka nie wyśle ​​plików cookie z żądaniami do innych ścieżek. Dotyczy to również innych właściwości, ale najprawdopodobniej jest to ścieżka.

Nie będzie to miało związku z konfiguracją kątową, ale może przywrócić ci jeszcze kilka godzin.

Poza tym jedynym prawdopodobnym wyjaśnieniem jest to, że używasz starej wersji Angular, ale biorąc pod uwagę szczegóły twojego pytania i linki do innych odpowiedzi, które wydają mi się mało prawdopodobne.

1

Widzę dwie różne poddomeny.

  • admin.vibetrace.com
  • app.vibetrace.com

spróbuj ustawić plik cookie dla domeny głównej extenso:

Set-Cookie:vibetrace.ssid=...; Domain=.vibetrace.com; Path=/; Expires=... 

referencyjny: Wikipedia: HTTP Cookie - Domain and Path

Powiązane problemy