2015-10-07 7 views
6

Używam interfejsu Web RestFUL API od mojego klienta w AngularJS.Uzyskaj wartość JSESSIONID i utwórz ciasteczko w AngularJS

app.controller('LoginController', [ 
    '$http', 
    '$cookies', 

    function($http, $cookies) { 
     this.credentials = {}; 

     this.http = $http; 

     this.login = function() { 
     console.log(this.credentials); 

     var authdata = btoa(
      this.credentials.username + 
      ':' + 
      this.credentials.password 
     ); 

     $http.defaults.headers.common['Authorization'] = 'Basic ' + authdata; 

     console.log($http); 

     var res = $http.post("http://API_NAME/library"); 

     res.success(function(data, status, header){ 
      alert('Successfull func'); 

      console.log($cookies.get('JSESSIONID')); 
     }); 

     res.error(function(data, status, headers, config) { 
      console.log('Error Log'); 
     }); 
    }; 
    }, 
]); 

Potem mam to nagłówki HTTP Reagowanie

Set-Cookie:JSESSIONID=azekazEXAMPLErezrzez; Path=/; HttpOnly 

używam ngCookies uzyskać wartość JSESSIONID a następnie utworzyć go ręcznie w przeglądarce, ale nie mogę go otworzyć.

Widziałem już wszystkie posty na ten temat w StackOverflow, ale są one przestarzałe lub całkowicie niejasne.

Dzięki za zainteresowanie i pomoc.

+0

Dlaczego potrzebujesz dostępu do JSESSIONID w Angular? Ten plik cookie jest oznaczony jako HttpOnly, tzn. Nie można uzyskać do niego dostępu w JS. –

+0

Nie udało mi się automatycznie odczytać wysyłania pliku cookie JSESSIONID. Myślałem, że muszę to zrobić ręcznie. Komentarze pomogły mi to zrozumieć. Rozwiązywanie problemów –

Odpowiedz

7

Nie możesz pobrać plików cookie HttpOnly z JavaScript. Taki jest cel flagi HttpOnly.

To powiedziawszy, nie powinieneś. Plik cookie powinien być wysyłany automatycznie z każdym żądaniem na ten sam serwer. Jeśli masz do czynienia z żądaniami XHR z różnych źródeł, ustaw your_XHR_instance.withCredentials na true, aby dodać pliki cookie.

+1

'XMLHttpRequest.withCredentials'? Ponieważ jest to obiekt JavaScript, trudno byłoby ustawić go po stronie serwera. – Quentin

+2

dzięki! Właśnie musiałem ustawić app.config: \t \t $ httpProvider.defaults.withCredentials = true; sprawdź na moim resturcyjnym serwerze, czy "Access-Control-Allow-Origin" było poprawnie ustawione, a "Access-Control-Allow-Credentials" ustawiono na true. Działa dobrze. Dzięki za pomoc :) –