2016-07-27 6 views
0

Ich bekomme Probleme bei der Verwendung von angularjs $ http in einer CORS-Anfrage, meine Erfolgsfunktion authenticateSuccess (Daten, Status, Header) bekommen falsche Header. Wie wir wissen, wird jede CORS-Anfrage zweimal in angularjs sein, ich bekomme zweimal Antwort vom Server, das erste Mal ist die Korsvalidierungsinformation, die zweite ist benötigte Antwort, aber meine Erfolgsfunktion erhält die Header in der ersten Antwort. Aber es sind Daten von der zweiten Antwort.

function login(credentials) { 

     var data = { 
      username: credentials.username, 
      password: credentials.password, 
      rememberMe: credentials.rememberMe 
     }; 
     console.log(data); 
     return $http.post('//localhost:8080/api/authenticate', data).success(authenticateSuccess); 

     function authenticateSuccess(data, status, headers) { 
      console.log(headers()); 
      console.log(data); 
      var bearerToken = headers('Authorization'); 
      if (angular.isDefined(bearerToken) && bearerToken.slice(0, 7) === 'Bearer ') { 
       var jwt = bearerToken.slice(7, bearerToken.length); 
       service.storeAuthenticationToken(jwt, credentials.rememberMe); 
       return jwt; 
      } 
     } 
    } 
+0

Der '$ http'' .success' Handler ist veraltet. Verwenden Sie stattdessen '.then'. https://docs.angularjs.org/api/ng/service/$http#deprecation-notice – Phil

+0

yep, ich habe es mit .then geändert. aber ich bekomme die gleichen Probleme, die Header ist von der ersten Zeit Antwort, die Daten sind von der zweiten Zeit Antwort. –

Antwort

0

Sie erhalten dieses Problem als Header, die Sie zu senden sind, ist nicht mit den Headern in Backend angepasst

So lassen Im Frontend nehme an, Sie zu senden Header

contentHeaders = new Header(); contentHeaders.append ('Autorisierung', 'Ihr Token'); contentHeaders.append ('Content-Type', 'application/json'); contentHeaders.append ('Access-Control-Allow-Origin', '*');

Also sollten diese Header wie 'Authorization', 'Content-Type', 'Access-Control-Allow-Origin' mit Ihrer Kopfzeile im Backend übereinstimmen.

So in Backend 'Access-Control-Allow-Headers' sollten alle oben Header unter

res.header ("Access-Control-Allow-Origin", "*") zu sehen haben; res.header ("Access-Control-Allow-Headers", "Autorisierung, Inhaltstyp, Access-Control-Allow-Origin");

Also hier in Access-Control-Allow-Header müssen Sie alle Header übergeben, die Sie von Frontend senden: 'Authorization', 'Content-Typ', 'Access-Control-Allow-Origin'.

Es funktioniert perfekt, wenn Sie das obige Konzept verwenden.

Danke