Ich habe diese kleine App, die einen Dienst für eine API fragt. Ich habe die Anmeldeinformationen wie folgt festgelegt:Header-Problem (Angular): Server antwortet mit 401 und 200 in der gleichen Anfrage?
this.http.get<Response>(url, {
headers: new HttpHeaders().set('Authorization', 'Basic '
+ btoa('C7YHKF91RAABYXNK :JMGYBMAT1X18KA2W '))
})
.subscribe(data => {
Response = data['results'];
Aber die Protokolle sind „seltsam“:
Es gibt eine 401 und dann eine 200 und die API-Rückkehr ist nicht, was suposed wurde zurückzukehren (eine png Bild). Wenn ich auf "Edge" klicke, fragt der Browser nach dem Token. Ich gebe die Zugangsdaten ein und dann funktioniert der Dienst (Chrome ist ähnlich) ... Gestern hat alles gut funktioniert, aber jetzt habe ich dieses Problem. Ist es die API? Sind die Header falsch eingerichtet? Ich habe eine Live-Demo zum Testen here. Danke für die Hilfe!
EDIT wie @Mudassar vorgeschlagen
onSubmit({ valid }: { valid: boolean }, f: any) {
if {//
}
else {
let color = encodeURIComponent(this.params.handwriting_color);
const url =
`https://api.handwriting.io/render/png?handwriting_id=${this.params.handwriting_id}&text=${this.params.text}&handwriting_size=${this.params.handwriting_size}&handwriting_color=${color}`;
//SET HEADERS
let headers= new HttpHeaders();
headers.append('Authorization', 'Basic ' + btoa('C7YHKF91RAABYXNK :JMGYBMAT1X18KA2W '))
headers.append("Access-Control-Allow-Origin", "new[] { (string)context.Request.Headers['Origin'] }");
headers.append("Access-Control-Allow-Headers", "new[] { 'Origin, X-Requested-With, Content-Type, Accept, Authorization' }");
headers.append("Access-Control-Allow-Methods", "new[] { 'GET, POST, PUT, DELETE, OPTIONS' }");
headers.append("Access-Control-Allow-Credentials", "new[] { 'true' }");
//REQUEST
this.http.get<Response>(url, {
headers: headers
})
.subscribe(data => {
Response = data['results'];
}, (err: HttpErrorResponse) => {
if (err.error instanceof Error) {
console.log('An error occurred:', err.error.message);
} else {
console.log(`Backend returned code ${err.status}, body was: ${err.error}`);
console.log(Response);
}
});
}
Aber ich bekomme immer noch die 401 ...
Danke für Ihre Antwort @Mudassar; Ich habe ähnliche Probleme durchsucht, die versuchen, die Zugriffskontrolle korrekt zu implementieren, aber ich kann es immer noch nicht richtig machen. Yo bedeutet, dass ich das entlang des Token setzen muss? – Mellville
Ich habe wie folgt versucht: 'this.http.get (url, { Header: neue httpheaders() festgelegt (Access-Control-Allow-Header. Authorization, Grund + btoa (C7YHKF91RAABYXNK: JMGYBMAT1X18KA2W)) }) aber ich bekomme die 401 –
Mellville
Dank @Mudassar, ich war bereits in das Thema und Ihre Lösung scheint sehr vollständig, kugelsicher :) – Mellville