Skip to content

I have issue with refreshtoken , Two requests at the same time #200

@Moataz01210049831

Description

@Moataz01210049831

Two requests happened for getting refresh token first one success but second failed and log me out
it's failed due to taking the same exact refresh token in payload not new one
here my interciptor code

/* eslint-disable @typescript-eslint/naming-convention */
import {
HttpInterceptor,
HttpRequest,
HttpHandler,
HttpEvent,
} from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Store } from '@ngrx/store';
import { finalize } from 'rxjs/operators';
import { environment } from 'src/environments/environment';

import { TokenResponse, Requestor } from '@openid/appauth';
import { AuthService } from 'ionic-appauth';
import { from, Observable } from 'rxjs';

@Injectable()
export class AuthInterceptor implements HttpInterceptor {
private secureRoutes = environment.secureExternalApis;
private secureExternalRoutes = environment.secureExternalRoutes;
private guestToken = environment.guestToken;
constructor(private authService: AuthService, private appState: Store,
public store: Store,

) { }

private onEnd(): void {
console.log("we end here ")
}

intercept(req: HttpRequest, next: HttpHandler): Observable<HttpEvent> {
// convert promise to observable using 'from' operator
return from(this.handle(req, next))
}

async handle(request: HttpRequest, next: HttpHandler):
Promise<HttpEvent> {
const lang = localStorage.getItem('culture') ?? 'ar';
if (
!this.secureRoutes.find((x) => request.url.startsWith(x))
|| this.guestToken.find((x) => request.url.includes(x))
// && request.withCredentials !== true
) {
if (this.secureExternalRoutes.find((x) => request.url.includes(x))) {

    const token: TokenResponse = await this.authService.getValidToken();
    // debugger;
    request = request.clone({
      setHeaders: {
        // authorization: `Bearer ${t}`,
        authorization: `${(token.tokenType === 'bearer') ? 'Bearer' : token.tokenType} ${token.accessToken}`,
        'Accept-Language': lang,
      },
    });
    return next.handle(request).toPromise();;

  }
  else if (this.guestToken.find((x) => request.url.includes(x))) {
    // let token: TokenResponse = await this.getToken();

    // if (token && token.accessToken) {
    //   request = request.clone({
    //     setHeaders: {
    //       authorization: `${(token.tokenType === 'bearer') ? 'Bearer' : token.tokenType} ${token.accessToken}`,
    //       'Accept-Language': lang,
    //     },
    //   });
    // }
    // else {
    let guestUserToken: any = JSON.parse(localStorage.getItem('guestUserToken'));
    request = request.clone({
      setHeaders: {
        authorization: `Bearer ${guestUserToken}`,
        //  authorization: `${(guestUserToken.token_type === 'bearer') ? 'Bearer' : guestUserToken.token_type} ${guestUserToken.access_token}`,
        'Accept-Language': lang,
      },
    });
    //}



    return next.handle(request).toPromise();;

  }

  else {
    request = request.clone({
      setHeaders: {
        'Accept-Language': lang,
      },
    });
    return next.handle(request).toPromise();;

  }
}

let token: TokenResponse = await this.getToken();

if (!token) {
  request = request.clone({
    setHeaders: {
      'Accept-Language': lang,
    },
  });
  return next.handle(request).pipe().toPromise();;
}
request = request.clone({
  setHeaders: {
    // authorization: `Bearer ${token}`,
    authorization: `${(token.tokenType === 'bearer') ? 'Bearer' : token.tokenType} ${token.accessToken}`,
    'Accept-Language': lang,
  },
});

return next.handle(request).pipe().toPromise();

}

async getToken() {
let tokenResponse: TokenResponse = await this.authService.getValidToken(10);

return tokenResponse;

}

getRequest(request: HttpRequest, lang, token) {
if (token && token.accessToken) {
request = request.clone({
setHeaders: {
authorization: ${(token.tokenType === 'bearer') ? 'Bearer' : token.tokenType} ${token.accessToken},
'Accept-Language': lang,
},
});
}
else {
request = request.clone({
setHeaders: {
'Accept-Language': lang,
},
});
}
}

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions