Skip to content

#interceptor for #retry request incase #token #expired #refresh token #error

Notifications You must be signed in to change notification settings

acharyaks90/interceptorForResendFailureRequest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Interceptor

This project was generated with Angular CLI version 6.0.0. and Updated to 7.0.0

Interceptor for managing request retry , token expired , refreshing token , authentication resend the request

Interceptor for managing request retry request in case of error or failure due to token expired , refreshing token , authentication so resend the request, response on same

Request using http client code

...

  export class AppComponent implements OnInit{
    title = 'app';
    jsData: any;
    constructor( private  http: HttpClient) {
    }
    ngOnInit() {
      this.http.get('https://jsonplaceholder.typicode.com/postsyy').subscribe(data=>this.jsData=data);
    }
  }

...

Interceptor code for renew token

@Injectable()
export class AuthInterceptor implements HttpInterceptor {

    testSer(): Observable<any> {
    if (this.inProgress) {
      return Observable.create((observer) => {
        this.subject.subscribe((value) => {
          console.log(value);
          console.log('INSIDE IF');
          observer.next();
          observer.complete();
        });
      });
    } else {
      this.inProgress = true;
      return this.tokenService.getToken()
      .pipe(tap((data) => {
        console.log('data in progress testSer',data);
        this.test = data;
        this.inProgress = false;
        this.subject.next('1');
      }));
    }

  }

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    // @ts-ignore
    return next.handle(request)
    .pipe(catchError(error => {
       console.log(error);
      if (error.status === 400 && error.error.errorCode == "INVALID_EXPIRED_TOKEN") {
         return this.testSer().pipe(
          switchMap(() => {
            const newToken = this.appStorage.getFromApp('accessToken');
            console.log('Getting the token from session storage in expired interceptor');
            request = request.clone({
              setHeaders: {
                Authorization: 'Bearer ' + newToken
              }
            });
            request = request.clone({url: request.url});
            return next.handle(request);
          }),
        );
      }

      return throwError(error);
    }))
}

catch the request after response in error callback and make new request and resend to handle

About

#interceptor for #retry request incase #token #expired #refresh token #error

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published