我需要在每个请求中注入一个令牌。
我使用拦截器,但是要获取此令牌,我需要向我的Webserveur发出请求。
但是我找不到这种工作的方法。
我需要拦截器来等待我的令牌请求,但是我找不到实现该目标的方法。
我有这样的尝试异步功能:
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
this.loadingService.present();
if(request.url != "/rest/session/token")
{
return from(this.handleAccess(request,next)).pipe(
map((event: HttpEvent<any>) => {
if (event instanceof HttpResponse) {
this.loadingService.dismiss();
}
return event;
}),
catchError((err: HttpErrorResponse) => {
this.loadingService.dismiss();
if ((err.status === 401 || err.status === 403) && this.router.url !== '/login'){
this.storageService.setUid("");
this.router.navigate(['/login']);
}
return throwError(err);
}));;
}else{
return next.handle(request);
}
}
private getXCRFToken() {
return this.httpClient.get(environment.server_rest+'/rest/session/token').pipe(
tap(async (res) => {
console.log(res)
})
);
}
private async handleAccess(request: HttpRequest<any>, next: HttpHandler):
Promise<HttpEvent<any>> {
let tokenXcrf:any;
console.log("call token XCRF");
tokenXcrf = await this.getXCRFToken().toPromise();
console.log('valeur xcrf:',tokenXcrf);
let changedReq;
changedReq = request.clone({
headers: new HttpHeaders({
'X-CSRF-Token': tokenXcrf,
})
});
return next.handle(changedReq).toPromise();
}
我从请求中一直没有得到答复。 但是在网络开发工具中,我看到带有令牌的/ token请求调用。
我在做什么错了?