2013-06-12 33 views
65

Pracujemy nad usługą RESTful WebService z AngularJS i Java Servlets. Kiedy użytkownik się loguje, nasz backend wysyła nagłówek "Set-Cookie" do frontendu. W Angular uzyskujemy dostęp do nagłówka poprzez $cookies (ngCookie - moduł) i ustawiamy go. enter image description here

Teraz, gdy użytkownik jest zalogowany, może na przykład usunąć niektóre rzeczy. Dlatego frontend wysyła żądanie GET do backendu. Ponieważ pracujemy w różnych domenach musimy ustalić pewne Cors nagłówków i kątowe robi żądanie opcje przed rzeczywistą żądanie GET:

OPCJE żądanie: OPTIONS request

żądania GET GET request

Robimy to w Angular za pomocą modułu http, ale po prostu nie wyśle ​​pliku cookie, zawierającego JSESSIONID.

Jak mogę włączyć Angular, aby wysyłać pliki cookie?

Odpowiedz

129

W config DI $httpProvider a następnie ustawić withCredentials true:

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

informacji na angularjs withCredentials: http://docs.angularjs.org/api/ng.$http

Które linki do artykułu Mozilla: https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control#section_5

+6

To i ustawienie nagłówka backendu na Allow-Credentials rozwiązało problem! Dzięki! –

+10

Po prostu, aby dodać do tego, zauważyłem, kiedy wykonałem połączenie typu '$ http.get ('something', {withCredentials: true})' przeglądarka nie wyśle ​​plików cookie. Jednak użycie powyższego kodu do dodania 'withCredentials' do wartości domyślnych zrobiło lewę. Nie wiem, dlaczego, ale mam nadzieję, że to pomoże, jeśli ktoś inny przejdzie przez ten problem. –

+0

To ułatwiło mi życie, dziękuję. – Seiyria

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

Jeszcze jedna rzecz, o której musisz pamiętać: musisz włączyć obsługę plików cookie innych firm, musisz mieć . Jeśli masz globalnie wyłączone w Chrome, kliknij "i" -Symbol po lewej stronie nazwy domeny, następnie pliki cookie, następnie "zablokowane" i odblokuj domenę docelową.

+1

To podejście działało dla mnie w AngularJS2 .... ale nie do końca po sesji, którą stworzyłem przed zmianą mojego kodu źródłowego minął! – HDave

Powiązane problemy