post http – come inviare l’intestazione Autorizzazione?

Come si aggiungono le intestazioni alla propria richiesta http in Angular2 RC6? Ho ottenuto il seguente codice:

login(login: String, password: String): Observable { console.log(login); console.log(password); this.cookieService.removeAll(); let headers = new Headers(); headers.append("Authorization","Basic YW5ndWxhci13YXJlaG91c2Utc2VydmljZXM6MTIzNDU2"); this.http.post(AUTHENTICATION_ENDPOINT + "?grant_type=password&scope=trust&username=" + login + "&password=" + password, null, {headers: headers}).subscribe(response => { console.log(response); }); //some return } 

Il problema è che quell’angular non aggiunge l’intestazione di authorization. Invece di quello, in richiesta posso vedere le seguenti intestazioni aggiuntive:

 Access-Control-Request-Headers:authorization Access-Control-Request-Method:POST 

e sdch aggiunto in Accept-Encoding:

 Accept-Encoding:gzip, deflate, sdch 

Disfunatamente non esiste un’intestazione di authorization. Come dovrei aggiungerlo correttamente?

L’intera richiesta inviata dal mio codice è la seguente:

 OPTIONS /oauth/token?grant_type=password&scope=trust&username=asdf&password=asdf HTTP/1.1 Host: localhost:8080 Connection: keep-alive Pragma: no-cache Cache-Control: no-cache Access-Control-Request-Method: POST Origin: http://localhost:3002 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Access-Control-Request-Headers: authorization Accept: */* Referer: http://localhost:3002/login Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8,pl;q=0.6 

Ok. Ho trovato un problema

Non era sul lato angular. Ad essere onesti, non ci sono stati problemi.

Il motivo per cui non sono riuscito a soddisfare correttamente la mia richiesta era che la mia app server non gestiva correttamente la richiesta OPTIONS.

Perché OPZIONI, non POST? La mia app server è su host diversi, quindi frontend. A causa di CORS, il mio browser stava convertendo POST in OPTION: http://restlet.com/blog/2015/12/15/understanding-and-using-cors/

Con l’aiuto di questa risposta: Standalone Spring OAuth2 JWT Authorization Server + CORS

Ho implementato il filtro corretto sulla mia app lato server.

Grazie a @Supamiu, la persona che mi ha toccato per non inviare affatto POST.

hai bisogno di RequestOptions

  let headers = new Headers({'Content-Type': 'application/json'}); headers.append('Authorization','Bearer ') let options = new RequestOptions({headers: headers}); return this.http.post(APIname,body,options) .map(this.extractData) .catch(this.handleError); 

per ulteriori controllare questo link

Credo che sia necessario mappare il risultato prima di sottoscriverlo. Lo configuri in questo modo:

  updateProfileInformation(user: User) { var headers = new Headers(); headers.append('Content-Type', this.constants.jsonContentType); var t = localStorage.getItem("accessToken"); headers.append("Authorization", "Bearer " + t; var body = JSON.stringify(user); return this.http.post(this.constants.userUrl + "UpdateUser", body, { headers: headers }) .map((response: Response) => { var result = response.json(); return result; }) .catch(this.handleError) .subscribe( status => this.statusMessage = status, error => this.errorMessage = error, () => this.completeUpdateUser() ); } 

Ho avuto lo stesso problema. Questa è la mia soluzione utilizzando la documentazione angular e il token firebase:

 getService() { const accessToken=this.afAuth.auth.currentUser.getToken().then(res=>{ const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Authorization': res }) }; return this.http.get('Url',httpOptions) .subscribe(res => console.log(res)); }); }}