Можно ли как-то сделать автоматический выход из системы, если срок действия токена истек без обновления страницы? То есть, скажем, человек был на странице сайта, следил за ней, затем закрывал страницу или просто выключал ее, затем возвращал через час, и там отображалось сообщение о том, что выход произошел из-за истечения срока действия токена. И в то же время, чтобы отобразить это сообщение, не нужно обновлять страницу или выполнять какие-либо действия на сайте.
import { Injectable } from "@angular/core";
import { AuthService } from "../services/auth.service";
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse } from "@angular/common/http";
import { Observable, throwError } from "rxjs";
import { catchError } from "rxjs/operators";
import { Router } from "@angular/router";
@Injectable()
export class TokenInterceptor implements HttpInterceptor {
constructor(private auth: AuthService, private router: Router) { }
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (this.auth.isAuthenticated()) {
req = req.clone({
setHeaders: {
Authorization: this.auth.getToken()
}
});
}
return next.handle(req).pipe(catchError((error: HttpErrorResponse) => this.handleAuthError(error)));
}
private handleAuthError(error: HttpErrorResponse): Observable<any> {
if (error.status === 401) {
this.auth.signOut(), this.router.navigate(["/sign-in"]), {
queryParams: {
sessionFailed: true
}
};
}
return throwError(error);
}
}