问题描述
我遇到的问题很奇怪。
我正在使用Angular 9,并使用我在网上找到的资源,可以在下面创建拦截器。
例如,假设我必须对“ api / users”进行api调用,但是令牌已过期。 发生以下情况:
所需的行为将是第三步,再次调用“ api / users”。但是现在什么也没有发生。我想念的是什么?
private isRefreshing = false;
private refreshTokenSubject: BehaviorSubject<any> = new BehaviorSubject<any>(null);
intercept( request: HttpRequest<any>,next: HttpHandler ): Observable<HttpEvent<any>> {
request = this.addToken(request)
return next.handle(request).pipe(
tap(
event => {
if (event instanceof HttpResponse) {
// console.log(event.status);
}
},error => {
if (error.status === 401) {
return this.handle401Error(request,next);
}
}
)
);
}
**将访问令牌添加到每个请求
addToken(request: HttpRequest<any>) {
return request.clone({
setHeaders: {
Authorization: `Bearer ${localStorage.getItem('accesstoken')}`
}
});
}
**刷新令牌
private handle401Error(request: HttpRequest<any>,next: HttpHandler) {
if (!this.isRefreshing) {
this.isRefreshing = true;
this.refreshTokenSubject.next(null);
return this.authService.refreshToken().subscribe(token => {
this.isRefreshing = false;
this.refreshTokenSubject.next(token.access);
localStorage.setItem('accesstoken',token.access)
return next.handle(this.addToken(request));
});
} else {
return this.refreshTokenSubject.pipe(
filter(token => token != null),take(1),switchMap(jwt => {
return next.handle(this.addToken(request));
}));
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)