2017-10-19 4 views
1

Ich habe einen Authentifizierungsinterceptor, jedoch möchte ich diesen Interceptor Anforderungen filtern und nicht angewendet werden, wenn Benutzer auf Komponenten zugreifen wie Konto Passwort usw. bestätigen, die keine Benutzerauthentifizierung benötigen. Irgendein Beispiel dafür, wie es geht? Hier ist die Logik für auth Interceptor:Filtern von Anforderungen in httpInterceptor - Angular 4.3 +

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { 
    // Get the auth token from the service. 
    let authToken = this.authService.getToken(); 
    let authHeader = 'Bearer ' + authToken; 

    //For requests that are retried, we always want a fresh copy, else the request will have headers added multiple times. 
    //So Clone the request before adding the new header. 
    //NOTE: the cache and pragma are required for IE that will otherwise cache all get 200 requests. 
    const authReq = request.clone({ 
     setHeaders: { 
     Authorization: authHeader, 
     'Cache-Control': 'no-cache', 
     'Pragma': 'no-cache' 
     } 
    }); 
    // Pass on the cloned request instead of the original request. 
    return next.handle(authReq); 
} 

Antwort

0

Für diesen Fall ist die URL Ihrer Anfrage hilfreich.

Angenommen, Ihre Authentifizierungs Urls wie auth/login or auth/refreshToken sind, und Ihre Urls Ressource api sein wie, api/users, api/users/123, api/addUser, dann können Sie einen if Zustand versetzt, um zu überprüfen, was für die Anforderung.

Beispiel url Matching: -

if (request.url.match(/api\//)) { // api call 
    console.log('api call detected.'); 
    let authToken = this.authService.getToken(); 
    let authHeader = 'Bearer ' + authToken; 
    const authReq = request.clone({ 
    setHeaders: { 
     Authorization: authHeader, 
     'Cache-Control': 'no-cache', 
     'Pragma': 'no-cache' 
    } 
    }); 
    return next.handle(authReq); 
} 
else{ // auth call - you can put esle if conditions if you have more such pattern 
console.log('auth call detected.'); 
    return next.handle(request); 
}  

Jetzt authentication headers wird nur Ihre api-Aufruf hinzugefügt werden (ich meinte die Ressource api-Aufruf) und andere Anrufe werden nicht geändert.

NB: Ich habe wie Java in Back-End-Technologie gewesen, DBs, etc .. für längere Zeit und jetzt lernt Winkel zum ersten Mal, antwortete so wie ein mod: P, aber die Idee war von mein letztes Java-Projekt. Ich hoffe es hilft..!! :)