Skip to content

Instantly share code, notes, and snippets.

@bipoza
Forked from danielcrisp/token.interceptor.ts
Created July 28, 2020 08:29
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bipoza/4700698d53c468b5e49537c7fbbbb9c6 to your computer and use it in GitHub Desktop.
Save bipoza/4700698d53c468b5e49537c7fbbbb9c6 to your computer and use it in GitHub Desktop.
TokenInterceptor - Async HTTP Interceptors with Angular 4
import { Injectable } from '@angular/core';
import { HttpErrorResponse, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/mergeMap';
import { AuthService } from './auth.service';
@Injectable()
export class TokenInterceptor implements HttpInterceptor {
constructor (private auth: AuthService) {}
intercept (request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return this.auth.getUser()
.mergeMap((user: User) => {
if (user) {
// clone and modify the request
request = request.clone({
setHeaders: {
Authorization: `Bearer ${user.access_token}`
}
});
}
return next.handle(request)
// new
.do(() => {
// success
}, (err: any) => {
// error
if (err instanceof HttpErrorResponse) {
if (err.status === 401) {
// redirect user to login
this.auth.login();
}
}
});
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment