Zu behandeln, wie unberechtigte Anfragen(status 401 oder 403) mit neuen httpClient in eckigen 4.3
Ich habe eine auth-interceptor.service.ts
zur Bearbeitung der Anfragen
import {Injectable} from '@angular/core';
import {HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';
import {Observable} from 'rxjs/Observable';
import {Cookie} from './cookie.service';
import {Router} from '@angular/router';
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private router: Router) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
//Clone the request to add the new header.
const authReq = req.clone({headers: req.headers.set(Cookie.tokenKey, Cookie.getToken())});
//Pass on the cloned request instead of the original request.
return next.handle(authReq).catch(this.handleError);
}
private handleError(err: HttpErrorResponse): Observable<any> {
console.log(err);
if (err.status === 401 || err.status === 403) {
Cookie.deleteUser();
this.router.navigateByUrl(`/login`);
return Observable.of(err.message);
}
//handle your auth error or rethrow
return Observable.throw(err);
}
}
Aber ich bekomme die folgende Fehlermeldung. Nichts wirklich passiert, wie es nicht den cookie löschen oder es funktioniert nicht, navigieren Sie zu login-Seite
Jede Hilfe oder Anregungen wäre willkommen.
HttpClient unterstützt Abfangjäger. Sie verwenden sollten, um Fehler zu behandeln transparent, stattdessen zwingen Sie alle Ihre code zu verwenden, ApiService statt HttpClient direkt.
Ich habe auch ein auth-interceptor. Ich habe aktualisiert die post. Ist, dass der Ort, um solche Wünsche? Alle Beispiel-code??
wenn Sie gehen mit Ihrer Methode, Sie gehen zu müssen, wickeln Sie den gesamten http-Dienst. Ich würde empfehlen, entweder mit einem interceptor oder einer Erweiterung der http-Dienst und überschreiben die request-Methode nur.
Ich habe auch ein interceptor add header auf jede Anfrage. Ich bin nicht sicher, wie Sie Sie zu behandeln die Antwort von jeder Anfrage in den interceptor. Ich habe aktualisiert die post
Hinzugefügt ein Beispiel in einer Antwort
Ich habe auch ein auth-interceptor. Ich habe aktualisiert die post. Ist, dass der Ort, um solche Wünsche? Alle Beispiel-code??
wenn Sie gehen mit Ihrer Methode, Sie gehen zu müssen, wickeln Sie den gesamten http-Dienst. Ich würde empfehlen, entweder mit einem interceptor oder einer Erweiterung der http-Dienst und überschreiben die request-Methode nur.
Ich habe auch ein interceptor add header auf jede Anfrage. Ich bin nicht sicher, wie Sie Sie zu behandeln die Antwort von jeder Anfrage in den interceptor. Ich habe aktualisiert die post
Hinzugefügt ein Beispiel in einer Antwort
InformationsquelleAutor Sai Ram Gupta | 2017-09-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie Ihre Abfangjäger und nur behandeln es wie folgt:
keine Notwendigkeit für den http-Dienst-wrapper.
um den router zu verwenden, benötigen Sie eine Fabrik-Anbieter wie:
wo immer Sie sind, bietet das interceptor (wahrscheinlich app.Modul). verwenden Sie nicht einen Pfeil-Funktion. Sie werden nicht unterstützt in der Fabrik-Funktionen, wenn Sie versuchen, zu bauen, für prod.
Arbeiten plunk: https://plnkr.co/edit/UxOEqhEHX1tCDVPDy488?p=preview
this.router
undefiniert. Ich habe aktualisiert die post mit der Antwort. Wir danken Ihr für die Hilfe.benötigen Sie eine factory-Funktion, um eine httpinterceptor und injec den router... siehe das github gist.github.com/mrgoos/45ab013c2c044691b82d250a7df71e4c
aktualisiert meine Antwort.
Ich glaube, es ist die Verwendung des Routers in einem interceptor, http Abfangjäger sind registriert, bevor der router kann es also nicht injiziert werden, ohne dass es aufgrund der Winkel ist hierarchichal Injektoren
Ja stimmt, ich habe gerade den gleichen Fehler. Sieht, wie ich eine factory-Funktion wie in der gist link, den Sie zur Verfügung gestellt.
InformationsquelleAutor bryan60
Vom @bryan60 Vorschlag, den ich machte einige änderungen, um seine Lösung
In der app.- Modul.ts:
und in auth-interceptor.service.ts:
Wenn Sie mit AOT in der Gebäude-versuchen:
Ja danke für die info. Dies ist der einzige Ort, den ich mache, wie diese und diese werden direkt importiert, um app-Modul. Ich habe sicher kein anderes Modul importiert diese Abfangjäger.
InformationsquelleAutor Sai Ram Gupta
den oben @bryan60 Antwort ist funktioniert gut , wenn eine gerichtete Frage wie ich mit catch den Fehler im unten line
do() den Fehler behandeln(wenn Sie Gesicht Problem mit catch())
importieren in Datei:
handle Fehler:
Ich hoffe, dass dies jemand helfen.
InformationsquelleAutor yala ramesh