我的Angular 5应用程序请求拦截器正在工作,因为我可以将jwt附加到请求。
我的响应拦截器不起作用,因为它在我发出请求时首先会影响我的请求。而且它也不会拦截来自我的api的响应。
注意: 没有响应拦截器,请求就可以正常工作(只有请求拦截器)。
那是响应拦截器
@Injectable()
export class ResponseInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req)
.map(resp => {
if (resp instanceof HttpResponse) {
console.log('Response is ::');
console.log(resp.body)
}
return resp;
}).catch(err => {
console.log(err);
if (err instanceof HttpResponse)
{
console.log(err.status);
console.log(err.body);
}
return Observable.of(err);
});
}
}
这是请求拦截器
intercept(req: HttpRequest<any>,
next: HttpHandler): Observable<HttpHeaderResponse | HttpResponse<any> | HttpEvent<any>> {
const idToken = localStorage.getItem("admintoken") ? localStorage.getItem("admintoken") : localStorage.getItem("token");
if (idToken) {
const cloned = req.clone({
headers: req.headers.set("Authorization",
"Bearer:" + idToken)
});
return next.handle(cloned);
}
else {
return next.handle(req);
}
}
这是通过HttpClient模块发出的http请求的示例,位于发出api请求的服务中。
getGroups():Observable<Group[]>{
return this.http.post(this.all_groups_url,{
headers: new HttpHeaders().set('Accept', "application/json;q=0.9,*/*;q=0.8")
})
.map((groups:Group[]) => {
if(groups){
return groups;
}
else{
return null;
}
})
.pipe(
catchError(this.handleError)
)
}
这是我的app.module提供商部分
providers: [
AuthService,
AuthGuardService,
UnauthGuardService,
{
provide: HTTP_INTERCEPTORS,
useClass: ResponseInterceptor,
multi: true
},
{
provide: HTTP_INTERCEPTORS,
useClass: JWTInterceptor,
multi: true
}
],
我需要知道如何使请求拦截器和响应拦截器协同工作,现在它只是请求拦截器有效,并且似乎响应拦截器阻止了它并且没有完成其工作。
我还需要从api截获过期令牌和未激活用户的响应。