Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- export class AuthInterceptor implements HttpInterceptor {
- authService;
- refreshTokenInProgress = false;
- tokenRefreshedSource = new Subject();
- tokenRefreshed$ = this.tokenRefreshedSource.asObservable();
- constructor(private injector: Injector, private router: Router, private snackBar: MdSnackBar) {}
- addAuthHeader(request) {
- const authHeader = this.authService.getAuthorizationHeader();
- if (authHeader) {
- return request.clone({
- setHeaders: {
- "Authorization": authHeader
- }
- });
- }
- return request;
- }
- refreshToken() {
- if (this.refreshTokenInProgress) {
- return new Observable(observer => {
- this.tokenRefreshed$.subscribe(() => {
- observer.next();
- observer.complete();
- });
- });
- } else {
- this.refreshTokenInProgress = true;
- return this.authService.refreshToken()
- .do(() => {
- this.refreshTokenInProgress = false;
- this.tokenRefreshedSource.next();
- });
- }
- }
- logout() {
- this.authService.logout();
- this.router.navigate(["login"]);
- }
- intercept(request: HttpRequest<any>, next: HttpHandler): Observable<any> {
- this.authService = this.injector.get(AuthService);
- // Handle request
- request = this.addAuthHeader(request);
- // Handle response
- return next.handle(request).catch(error => {
- if (error.status === 401) {
- return this.refreshToken()
- .switchMap(() => {
- request = this.addAuthHeader(request);
- return next.handle(request);
- })
- .catch(() => {
- this.logout();
- return Observable.empty();
- });
- }
- return Observable.throw(error);
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement