在超时前刷新令牌 Angular
Refresh token before time out Angular
我必须刷新令牌,我使用拦截器来完成它,但它似乎不起作用。当 API returns HTTP 代码 401.
时,我的函数被调用但令牌未刷新
服务的功能
public getToken(): string {
this.token = localStorage.getItem(TOKEN_KEY);
return this.token;
}
这里我post我要刷新的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);
});
}
}
在 tokenService.refreshToken
中,您需要将令牌存储在 tokenService 中的某处,以便 this.tokenService.getToken()
在以下请求中获取它(或者重试您有重试行为)
类似于:
refreshToken() {
console.log(this.token);
this.token = this.http.post<any>(environment.apiBaseUrl + 'refresh', this.token, httpOptions);
}
我必须刷新令牌,我使用拦截器来完成它,但它似乎不起作用。当 API returns HTTP 代码 401.
时,我的函数被调用但令牌未刷新服务的功能
public getToken(): string {
this.token = localStorage.getItem(TOKEN_KEY);
return this.token;
}
这里我post我要刷新的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);
});
}
}
在 tokenService.refreshToken
中,您需要将令牌存储在 tokenService 中的某处,以便 this.tokenService.getToken()
在以下请求中获取它(或者重试您有重试行为)
类似于:
refreshToken() {
console.log(this.token);
this.token = this.http.post<any>(environment.apiBaseUrl + 'refresh', this.token, httpOptions);
}