【发布时间】:2021-05-01 09:37:24
【问题描述】:
我必须刷新令牌,我使用拦截器来执行此操作,但它似乎不起作用。我的函数被调用,但是当 API 返回 HTTP 代码 401 时令牌没有刷新。
服务的功能
public getToken(): string {
this.token = localStorage.getItem(TOKEN_KEY);
return this.token;
}
这里贴出我要刷新的token
refreshToken() {
console.log(this.token);
return this.http.post<any>(environment.apiBaseUrl + 'refresh', this.token, httpOptions);
}
拦截器
intercept(
req: HttpRequest<any>,
next: HttpHandler
): Observable<HttpEvent<any>> {
let authReq = req;
const token = this.tokenService.getToken();
if (token) {
authReq = req.clone({
headers: req.headers.set(TOKEN_HEADER_KEY, 'Bearer ' + token),
});
}
return next.handle(authReq).catch((err: any) => {
console.log(err);
if (err instanceof HttpErrorResponse) {
console.log(err.status);
console.log(err.statusText);
if (err.status === 401) {
this.tokenService.refreshToken();
}
}
return throwError(err);
});
}
}
【问题讨论】:
标签: angular token interceptor