2016-06-30 10 views
1

Ich bin eine Login-Seite in Eckige zu schaffen. Nach dem Login-API-Aufruf (POST) erhalte ich ein Token als Antwort. In Controller, versuche ich, dieses Token in „gemeinsamen“ Header zu setzen, so dass ich es für die Zulassung für alle weiteren API-Aufrufe zu verwenden:Set Token in Kopfzeile auf API-Antwort

LoginSrv.authenticate($scope.credentials).then(
     function(data){ 
      $http.defaults.headers.common.Authorization = data.token; 
      $state.go('nextpage'); 
     } 
); 

Auf der nächste Seite gibt es wieder einen POST-API-Aufruf. Nach diesem Aufruf, wenn ich den Request-Header im Debugger überprüfe, sehe ich dieses Token im Header. Diese Antwort navigiere erneut zur dritten Seite (diesmal setze ich den Header nicht neu). Auf der dritten Seite, wenn ich eine API (GET oder POST) anrufe, ist die "Authorization" dieses Mal nicht in den Kopfzeilen verfügbar. Ich bin mir nicht sicher, wie sich das von selbst löst.

+0

können Sie den Controller-Code für gemeinsam nutzen, wenn Sie den zweiten API-Aufruf zu machen, und die dritten? – ExoticChimp

+0

Erforscht mehr dazu. Es scheint ein serverseitiges Problem zu sein. – Gaurav

+0

Der dritte API-Aufruf wird bei der Pre-Flight-Option gestoppt, weshalb der Header nicht angezeigt wird. Es löst 401 Autorisierungsfehler auf OPTION aus. – Gaurav

Antwort

1

Da Ihre dritte Anfrage Cross-Domain ist, scheint es den Server nicht richtig an die Preflight-Browser OPTIONS Anfrage reagiert, die überprüfen gemacht wird, welche Methoden usw. zur Verfügung stehen, bevor es Ihre Anfrage sendet. Es ist kein Angular-Problem. Eine Lösung wäre, Ihren Server so zu konfigurieren, dass er auf diese OPTIONS-Anfrage korrekt reagiert. Dieser SO Link (sofern in den Kommentaren vorher) erklärt in etwas detaillierten und Diskussionen von potentiellen Lösungen AngularJS performs an OPTIONS HTTP request for a cross-origin resource