je voulais exclure certains services utilisant l'intercepteur.
app.module.js
providers: [
UserService,
RolesService,
{
provide: HTTP_INTERCEPTORS,
useClass: TokenInterceptor,
multi: true
},
],
Login.service.ts
return this.httpClient.post(this.appUrl + '/oauth/token', body.toString(), { headers, observe: 'response' })
.map((res: Response) => {
const response = res.body;
this.storeToken(response);
return response;
})
.catch((error: any) => {
ErrorLogService.logError(error);
return Observable.throw(new Error(error.status));
});
}
Répondre à cela non seulement dans les commentaires demandés ;-)
Pour exclure certains services (ou même les mêmes services utilisés dans différents composants) d'un intercepteur, il est préférable de diviser votre application en modules et de fournir l'intercepteur uniquement dans les modules où cela est nécessaire. Par exemple, après vous être connecté ou à l'intérieur d'une zone d'administration.
L'intercepteur peut même être prévu pour des composants uniques en utilisant le @Component
la propriété providers
de la déclaration.
Bien que la réponse de # Fussel (ci-dessus) fonctionne, il n'est souvent pas recommandé d'inclure le service d'intercepteur dans chaque module de composant. C'est contre-intuitif et contre-productif. Nous voulons l'intercepteur en un seul endroit et travaillons pour toutes les requêtes http. Une façon consiste à exclure la liaison d'en-tête dans la fonction intercept () en fonction de l'url.
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const re = /login/gi;
// Exclude interceptor for login request:
if (req.url.search(re) === -1 ) {
req = req.clone({
setHeaders: {
Authorization: `Bearer ${localStorage.getItem('authToken')}`
}
});
}
return next.handle(req);
}
J'ai eu le même problème. Une fois implémenté, l'intercepteur chasse toutes les requêtes http de toute façon. C'était dans mon code pour savoir si j'avais ou non un jeton d'accès. Si je ne l'ai pas fait, le parametar du jeton d'intercepteurs doit être réglé sur "" (chaîne vide). Que tout se passe. Dans le code fn d'intercepteur, cela ressemble à ceci:
intercept(
request: HttpRequest<any>,
next: HttpHandler**strong text**
): Observable<HttpEvent<any>> {
//how to update the request Parameters
**let token : string;
let currentUser : any = JSON.parse(localStorage.getItem('currentUser'));
if (currentUser){
token = currentUser.access_token;
}else{token = ""}**
console.log("Token dobavljen sa localStorage.getItem: ", token);
if (token) {
request = request.clone({ headers: request.headers.set('Authorization', 'Bearer ' + token) });
}
if (!request.headers.has('Content-Type')) {
request = request.clone({ headers: request.headers.set('Content-Type', 'application/json') });
}
request = request.clone({ headers: request.headers.set('Accept', 'application/json') });
//logging the updated Parameters to browser's console
console.log("Before making api call : ", token);
return next.handle(request).pipe(
tap(
event => {
//logging the http response to browser's console in case of a success
if (event instanceof HttpResponse) {
console.log("api call success :", event);
}
},
error => {
//logging the http response to browser's console in case of a failuer
if (event instanceof HttpResponse) {
console.log("api call error :", event);
}
}
)
);
//}
}