Advertisement
Guest User

Untitled

a guest
Apr 9th, 2020
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. export class AuthInterceptor implements HttpInterceptor {
  2.  
  3.     authService;
  4.     refreshTokenInProgress = false;
  5.  
  6.     tokenRefreshedSource = new Subject();
  7.     tokenRefreshed$ = this.tokenRefreshedSource.asObservable();
  8.  
  9.     constructor(private injector: Injector, private router: Router, private snackBar: MdSnackBar) {}
  10.  
  11.     addAuthHeader(request) {
  12.         const authHeader = this.authService.getAuthorizationHeader();
  13.         if (authHeader) {
  14.             return request.clone({
  15.                 setHeaders: {
  16.                     "Authorization": authHeader
  17.                 }
  18.             });
  19.         }
  20.         return request;
  21.     }
  22.  
  23.     refreshToken() {
  24.         if (this.refreshTokenInProgress) {
  25.             return new Observable(observer => {
  26.                 this.tokenRefreshed$.subscribe(() => {
  27.                     observer.next();
  28.                     observer.complete();
  29.                 });
  30.             });
  31.         } else {
  32.             this.refreshTokenInProgress = true;
  33.  
  34.             return this.authService.refreshToken()
  35.                .do(() => {
  36.                     this.refreshTokenInProgress = false;
  37.                     this.tokenRefreshedSource.next();
  38.                 });
  39.         }
  40.     }
  41.  
  42.     logout() {
  43.         this.authService.logout();
  44.         this.router.navigate(["login"]);
  45.     }
  46.  
  47.     intercept(request: HttpRequest<any>, next: HttpHandler): Observable<any> {
  48.         this.authService = this.injector.get(AuthService);
  49.  
  50.         // Handle request
  51.         request = this.addAuthHeader(request);
  52.  
  53.         // Handle response
  54.         return next.handle(request).catch(error => {
  55.  
  56.             if (error.status === 401) {
  57.                 return this.refreshToken()
  58.                     .switchMap(() => {
  59.                         request = this.addAuthHeader(request);
  60.                         return next.handle(request);
  61.                     })
  62.                     .catch(() => {
  63.                         this.logout();
  64.                         return Observable.empty();
  65.                     });
  66.             }
  67.  
  68.             return Observable.throw(error);
  69.         });
  70.     }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement