2017-12-07 1 views
1

Ich bin mit einem Login-Endpunkt, der einen Träger Token als Antwort-Header zurückzugibt, als ich in den „Netzwerk“ Chrome inspizieren Fenster sehen kann:Wie kann man auf Header von einer HttpClient-Antwort zugreifen? (Eckige/Ionic)

Response Headers 
Access-Control-Allow-Credentials:true 
Access-Control-Allow-Origin:http://localhost:8100 
Authorization:Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJuZWxpby5jdXJzb3NAZ21haWwuY29tIiwiZXhwIjoxNTEyNzA3OTQ3fQ.pOR4WrqkaFXdwbeod1tNlDniFZXTeMXzKz9uU68rLXEWDAVRgWIphvx5F_VCsXDwimD8Q04JrxelkNgZMzBgXA 
Cache-Control:no-cache, no-store, max-age=0, must-revalidate 
Content-Length:188 
(etc...) 

Allerdings, wenn ich versuche, print "Header" aus der Antwort eine Httpclient-Instanz mit:

authenticate(credentials) { 
    let creds = JSON.stringify(credentials); 
    let contentHeader = new HttpHeaders({"Content-Type": "application/json"}); 
    this.http.post(this.LOGIN_URL, creds, { headers: contentHeader, observe: 'response'}) 
     .subscribe(
     (resp) => { 
      console.log("resp-ok"); 
      console.log(resp.headers); 
     }, 
     (resp) => { 
      console.log("resp-error"); 
      console.log(resp); 
     } 
    ); 
    } 

ich eine völlig andere Struktur erhalten:

HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, lazyInit: ƒ} 
lazyInit : ƒ() 
lazyUpdate : null 
normalizedNames : Map(0) {} 

ich habe auch versucht die get (headerNam e) Methode und wurde null. Was vermisse ich? Wie kann ich diesen Header "Autorisierung" von meiner Antwort erhalten?

+0

versuchen Sie dies [Angular-2-Get-Authorization-Header] (https://stackoverflow.com/questions/42314069/angular-2-get -authorization-header) –

Antwort

1

Sind Sie sicher, dass Sie es als Teil der Antwort hinzufügen? Sie müssen den Header in der Antwort hinzufügen:

public void methodJava(HttpServletResponse response){ 
    ... 
response.addHeader("access-control-expose-headers", "Authorization"); 
} 

Und dann können Sie tun, was Sie versucht haben. Ich denke, headers.get ('Authorization') sollte Ihnen den gewünschten Wert geben

+0

Frage nur, warum dies die akzeptierte Antwort ist? Das ist Java-Code. – brijmcq

0

versuchen wie folgt aus:

authenticate(credentials) { 
    let creds = JSON.stringify(credentials); 
    let contentHeader = new HttpHeaders({ "Content-Type": "application/json" }); 
    this.http.post(this.LOGIN_URL, creds, { headers: contentHeader, observe: 'response' }) 
     .subscribe(
     (resp) => { 
      let header: HttpHeaders = resp.headers; 
      console.log(header.get('Authorization')) 
     }, 
     (resp) => { 
      console.log("resp-error"); 
      console.log(resp); 
     } 
     ); 
} 
+0

HttpHeaders, nicht Header – estus

1

Sie sind fast da.

Der Grund, warum es nicht funktioniert, ist, weil Sie die .get Funktion der headers nicht verwendet haben.

Ändern Sie diese

console.log(resp.headers); 

Zu diesem

console.log(resp.headers.get('Authorization')) 

Mehr Info:

Amts doc here

Verwandte Themen