作者:去弥O补从前所有不完整 | 来源:互联网 | 2023-01-19 18:12
1> Jérémie Chaz..:
解决了
与有用的帖子/sf/ask/17360801/
import { Observable } from 'rxjs';
import { Injectable, Inject, Injector } from '@angular/core';
import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpResponse, HttpErrorResponse } from '@angular/common/http';
import { UserService } from "./user/services/user.service";
@Injectable()
export class AngularInterceptor implements HttpInterceptor {
public userService;
constructor(private injector: Injector) {
}
private applyCredentials = function (req) {
return req.clone({
headers: req.headers.set('Authorization', 'Bearer ' + localStorage.getItem('data-app'))
});
};
intercept(req: HttpRequest, next: HttpHandler): Observable> {
this.userService = this.injector.get(UserService);
return next.handle(this.applyCredentials(req))
/*.do(event => {
if (event instanceof HttpResponse) {
console.log(event);
}
})*/
.catch((res) => {
console.log('Token refresh');
if (res.status === 401 || res.status === 403) {
return this.userService.refreshToken().first().flatMap((data: any) => {
if (data.token !== '') {
localStorage.removeItem('data-app');
localStorage.setItem('data-app', data.token);
this.userService.token = localStorage.getItem('data-app');
} else {
this.userService.logOut();
return Observable.throw(res);
}
return next.handle(this.applyCredentials(req));
});
} else if (res.status === 500) {
this.userService.logOut();
}
return Observable.throw(res);
});
}
}
当在刷新令牌的同时提出其他请求时,这是否可以解决这种情况?当我认为其他请求需要等到第一个请求完成刷新令牌后,其他请求也会尝试刷新令牌。