我有一个HttpInterceptor,它为每个http请求添加一个JWT标记。现在我希望对401响应作出反应,这将在令牌过期后立即发生。
有些事情:
到目前为止,这就是我所拥有的:
// Imports [...]
@Injectable()
export class MyHttpInterceptor implements HttpInterceptor {
constructor(private logger: LoggingService, private injector: Injector) { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// Handle request
const authService = this.injector.get(AuthService);
const authToken = authService.getToken();
if (authToken) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${authService.getToken()}`
}
});
}
// Handle response
return next.handle(request)
.do(event => {
if (event instanceof HttpResponse) {
this.logger.logDebug(event);
}
})
.catch((err: HttpErrorResponse) => {
if (err.status === 401) {
// MISSING IMPLEMENTATION HERE
} else {
this.logger.logError(this.extractErrorMessage(err));
}
return Observable.throw(err);
});
}
private extractErrorMessage(err: HttpErrorResponse): string {
return err.error && err.error.devMessage ? err.error.devMessage : err.message;
}
}
在我继续之前,我有一些疑惑:
或者,我想在使用像Auth0的angular2-jwt这样的库发送每个http请求之前检查客户端令牌的有效性。这样,我不必重新发送请求,我只需要使用新令牌更新其标头。
对我来说,这看起来像一个更干净的解决方案,尽管每次都需要额外的时间来验证令牌。
欢迎任何想法。