Pour un projet scolaire, je dois créer une simple page de connexion avec Angular. Quand un bouton de connexion est cliqué, je dois ajouter un en-tête d'autorisation avec mon message. J'ai créé un backend et lorsque je poste ma valeur d'autorisation sur ce backend avec postman, cela fonctionne, donc rien ne cloche avec le backend. Lorsque j'essaie de publier sur le même serveur avec mon serveur, cela ne fonctionne pas. Quel est le meilleur moyen d'ajouter des en-têtes à votre message? Il semble que les opinions sont partagées. Ceci est mon code:
export class LoginComponent{
title = 'Login';
email = '';
password = '';
credentials = '';
basic = '';
constructor(private http:HttpClient){
}
createAuthorizationHeader(headers:Headers,basic){
headers.append('Authorization',basic);
}
login(event){
this.email = (<HTMLInputElement>document.getElementById("email")).value;
this.password = (<HTMLInputElement>document.getElementById("password")).value;
this.credentials = this.email + ":" + this.password;
this.basic = "Basic " + btoa(this.credentials);
console.log(this.basic);
let headers = new Headers();
headers.append('Content-Type','application/json');
headers.append('Authorization',this.basic);
let options = new RequestOptions({headers:headers});
console.log(headers);
return this.http.post('http://localhost:8000/api/v1/authenticate',options)
.subscribe(
res =>{
console.log(res);
},
err => {
console.log(err.message);
}
)
}
}
Lorsque j'exécute ce code, j'obtiens une réponse d'état 400 et les en-têtes ne sont pas ajoutés.
Le deuxième argument passé à HttpClient.post
représente le corps de la demande, mais vous fournissez Headers
ici. Utilisez ce qui suit pour fournir les en-têtes correctement:
return this.http.post('http://localhost:8000/api/v1/authenticate', null, options);
J'ai montré null
dans l'exemple du corps, mais vous souhaitez probablement inclure les propriétés email
et password
sous une forme ou une autre.
Vous mélangez également Http
et HttpClient
. Si vous utilisez HttpClient
(qui est maintenant l'approche recommandée), supprimez RequestOptions
et Headers
au profit de HttpHeaders
. Cela devient:
let headers = new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': this.basic });
let options = { headers: headers };
Le reste du code reste le même. Votre fonction createAuthorizationHeader
doit utiliser et renvoyer une instance de HttpHeaders
. Cette classe est immuable, donc append
renvoie un nouvel objet à chaque appel. Importer HttpHeaders
de @angular/common/http
.
Cela peut vous aider
let headers = new Headers();
headers.append('Content-Type','application/json');
//post data missing(here you pass email and password)
data= {
"email":email,
"password":password
}
return this.http.post('http://localhost:8000/api/v1/authenticate',data,{ headers: headers})
.subscribe(
res =>{
console.log(res);
},
err => {
console.log(err.message);
}
)