Genehmigung Träger token Winkel 5
Ich bin verwirrt über, wie man erstellen Sie eine gute-header für einen einfachen Get-request in Winkel-5.
Dies ist, was ich tun muss, Eckig:
Dies ist, was ich habe, so weit:
getUserList(): Observable<UserList[]> {
const headers = new Headers();
let tokenParse = JSON.parse(this.token)
headers.append('Authorization', `Bearer ${tokenParse}`);
const opts = new RequestOptions({ headers: headers });
console.log(JSON.stringify(opts));
const users = this.http.get<UserList[]>(this.mainUrl, opts)
return users
.catch(this.handleError.handleError);
}
Dies ist die Antwort, in meiner Konsole.log:
{"method":null,"headers":{"Authorization":["Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImYwODZlM2FiYTk0ZjVhMjVmNDhiNzlkYmI2YWUwOWY4YzE2MTUyMzg2N2I5MDZiY2MzNWQyNWJiYTZmYTE4YjEwZjA1MjZiNThkZjE2Y2FjIn0.eyJhdWQiOiJmMDExY2M1OC00MGNlLTQzYTktOGY3MS04NDI0OTRlM2E5OTciLCJqdGkiOiJmMDg2ZTNhYmE5NGY1YTI1ZjQ4Yjc5ZGJiNmFlMDlmOGMxNjE1MjM4NjdiOTA2YmNjMzVkMjViYmE2ZmExOGIxMGYwNTI2YjU4ZGYxNmNhYyIsImlhdCI6MTUyMzU1MTQ0NSwibmJmIjoxNTIzNTUxNDQ1LCJleHAiOjE1MjM1NTQ0NDUsInN1YiI6IjIiLCJzY29wZXMiOlsiYXV0aGVudGljYXRlZCIsImFuZ3VkcnUiXX0.E-WdQTl7nPDW0gj0rohfql-QgnAinzvDxPR-pySMrG07XFY9tA6Ex7IL23pDBmKDmQO8RcZKa0L5r6SRQq9_iqzMWzn5Zxp94J9TJrpZ2KGMoLR_FbK_tpC5G5q5vUnCe3q34sH7cPdT_2cI704OWWaYmIUKKpXWUIG0PJw_uKSJ_uOifPv59RZGQkoaQ9gPywDKe-uamm1Faug-Kk2YnFMoEJq7ou19zyxgdpX80ZTPUae67uB0PGLRuvxfGaqVsJ8k0NunAY3-pyUnBwR_3eeuOxf4TyfW2aiOJ9kuPgsfV4Z1JD7nMpNtTHMJaXEyNkBW8RlYHD1pj4dkdnsDmw"]},"body":null,"url":null,"withCredentials":null,"responseType":null}
Es sieht gut aus. Aber gibt mir diese Fehlermeldung
BEKOMMEN http://druang.dd:8080/user-list?_format=json 403 (Verboten)
Es ist ein weiterer Hinweis dieses Rätsel zu lösen. In Sublime text, Wenn ich mit der Maus über opts
es sagt so etwas wie:
FEHLER in src/app/services/userlist.service.ts(33,59): Fehler TS2345:
Argument des Typs "RequestOptions' nicht zuordenbar parameter
Typ '{ Header?: HttpHeaders | { [header: string]: string | string[];
}; beobachten?: "Körper"; params?: Ht...'. Der Typen der Eigenschaft 'Header'
inkompatibel sind.
Type 'Header' nicht zuordenbar Typ 'HttpHeaders | { [header: string]: string | string[]; }'.
Type 'Header' nicht zuordenbar Typ '{ [header: string]: string | string[]; }'.
Index-Signatur fehlt in type 'Header'.
Irgendeine Idee??
Hier ist die vollständige Git repo
Vielen Dank für Ihre Hilfe!
- Ich denke, Sie importieren die falsche Klasse für Header versuchen Sie, um zu überprüfen, angular-Dokumentation in der version 5 der http-Dienst war veraltet httpClient-service, aber die httpClient ist in @Winkel/common und die andere ist in @eckig/http Sie können sich nicht vermischen Klassen von denjenigen, die es verursachen, wird Fehler verursachen. Mir deine Fehler sieht aus wie Sie mit http von "@Winkel/common" und der Header von "@eckig/http", sondern die HttpHeaders von "@Winkel/common"
- Hallo, vielen Dank @Nicu, ist das meine import:
import { HttpClient, HttpHeaders } from '@angular/common/http';
nach dem Winkel - Dokumentation - Toll 😀 @eckig/http ersetzt werden, die mit @Winkel/common/http entfernt in die ng 6, nehme ich an.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich schlage vor, Sie verwenden eine HTTPInteceptor, die aufpassen würde, hinzufügen von token. Hier ist ein großer Artikel, zu erreichen, dass: https://www.illucit.com/angular/en-angular-5-httpinterceptor-add-bearer-token-to-httpclient-requests/
----- Eine andere Möglichkeit der Lösung des Problems. -----
import { Http, Headers, Response } from '@angular/http';
getLoggedInUser(auth_token): Observable<any> {
const headers = new Headers({
'Content-Type': 'application/json',
'Authorization': auth_token
})
return this.http.get(apiUrl, { headers: headers })
}
Und vergessen Sie nicht anrufen und abonnieren Sie in Ihrer Komponente.
Bearer ${auth_token}
Zwei Dinge:
headers.append(...)
nicht mutieren die Header-Objekt, so dass Ihre authorization-header nicht gesendet wird. Sie tun müssenheaders = headers.append(...)
Versuchen
this.http.get<UserList[]>(this.mainUrl, { headers: headers });
headers = headers.append
gibt mir: kann Nicht zuordnen, Überschriften, denn es ist eine Konstante oder eine nur-Lesen-Eigenschaftconst headers
zu lassen-Header` oder tunconst headers = new Headers().append('Authorization',
Träger ${tokenParse}`);let
es sagte:Type void is not assignable to type 'Headers'
const opts = new RequestOptions({ headers: headers });
ich habe :ERROR in src/app/services/userlist.service.ts(33,37): error TS2345: Argument of type '{ headers: void; }' is not assignable to parameter of type 'RequestOptionsArgs'. Types of property 'headers' are incompatible. Type 'void' is not assignable to type 'Headers'.
{headers:headers}
im http-get-Anfrage, bekam ich dies:ERROR in src/app/services/userlist.service.ts(35,59): error TS2345: Argument of type '{ headers: void; }' is not assignable to parameter of type '{ headers?: HttpHeaders | { [header: string]: string | string[]; }; observe?: "body"; params?: Ht...'. Types of property 'headers' are incompatible. Type 'void' is not assignable to type 'HttpHeaders | { [header: string]: string | string[]; }'.
const users = this.http.get<UserList[]>(this.mainUrl, { headers:new HttpHeaders().set('Authorization',
Träger ${tokenParse})})
Ich verwendete den folgenden code, und es funktioniert
Ich bin nicht sehr gut im Programmieren,aber mit ein wenig versuchen und scheitern
wenn dies gefunden:
Ist es nicht eigentlich egal, wenn ich
.set
oder.append
am Ende des Tages, es funktioniert in beiden Fällen...Ich weiß wirklich nicht, was passiert ist, so dass, wenn jemand will, zu erklären, es in die Kommentare, du bist herzlich willkommen...
Im Winkel 6 und 7, diese Methode kann verwendet werden, fängt alle HTTP-request und fügen Sie den bearer-token.
Umsetzung tutorial ist hier verfügbar. Youtube, dieser Kanal hat den ganzen tutorials.
Interceptor-Komponente
Komponente Guard
Hinzufügen app.Module.ts
Dann die Wache Hinzugefügt route