Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { Injectable } from '@angular/core';
- import {
- HttpRequest,
- HttpHandler,
- HttpEvent,
- HttpInterceptor,
- HttpErrorResponse
- } from '@angular/common/http';
- import { AuthService } from '../services/auth.service';
- import { Observable, of, throwError } from 'rxjs';
- import { Router } from '@angular/router';
- import { catchError, map } from 'rxjs/operators';
- import { HttpClient } from '@angular/common/http';
- import { ApiResult } from '../models/apiresult.model';
- @Injectable()
- export class TokenInterceptor implements HttpInterceptor {
- constructor(
- public auth: AuthService,
- private router: Router,
- private http:HttpClient
- ) { }
- intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
- console.log(request);
- if (request.url == '/api/authenticate/refreshaccesstoken' || request.url.includes('registration')) {
- return next.handle(request);
- }
- let refreshtoken = {
- "refreshtoken": ''
- };
- if (this.auth.getRefreshToken() != null) refreshtoken.refreshtoken = this.auth.getRefreshToken();
- if (this.auth.isLoggedIn()) {
- request = request.clone({
- setHeaders: {
- Authorization: `Bearer ${this.auth.getToken()}`
- }
- });
- return next.handle(request).pipe();
- }
- if (request.url == "/api/authenticate") {
- return next.handle(request);
- }
- let sub = null;
- let observable = new Observable<HttpEvent<any>>((subscriber) => {
- let originalRequestSubscription = next.handle(request).subscribe((resp) => {
- console.log(resp);
- this.http.post<ApiResult<JWT>>('/api/authenticate/refreshaccesstoken', refreshtoken).pipe(map(res => {
- return res;
- })).subscribe(data => {
- console.log(data.data);
- sub = this.auth.refreshToken(data.data);
- return observable;
- });
- subscriber.next();
- }
- );
- return () => {
- originalRequestSubscription.unsubscribe();
- }
- });
- console.log(sub);
- return observable;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement