Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

147
Views
Angular 10: repita la misma solicitud http después de obtener el token de actualización

Estoy tratando de lograr lo siguiente en mis llamadas HTTP

  1. Si una solicitud de API devuelve 401, llame al extremo del token de actualización para obtener el token.
  2. Vuelva a intentar la misma llamada HTTP con el token actualizado

Aquí está el código relevante

 // this method invoke when the HTTP interceptor returns 401 status code handle401(request: HttpRequest<any>, next: HttpHandler) { if (!this.refreshTokenInProgress) { this.refreshTokenInProgress = true; this.refreshTokenSubject.next(null); return this.getToken((data: any) => { this.refreshTokenInProgress = false; this.refreshTokenSubject.next(data); request = request.clone({ headers: request.headers.set('Authorization', `Bearer ${data}`) }); return next.handle(request); }) } else { return this.refreshTokenSubject.pipe( filter(token => token != null), take(1), switchMap((accessToken) => { request = request.clone({ headers: request.headers.set('Authorization', `Bearer ${accessToken}`) }); return next.handle(request); }) ); } }

Obtener el token de actualización

 getToken(cb: any) { let poolData = { UserPoolId: environment.cognitoUserPoolId, // Your user pool id here ClientId: environment.cognitoAppClientId // Your client id here }; let userPool = new CognitoUserPool(poolData); let cognitoUser = userPool.getCurrentUser(); cognitoUser?.getSession((err: any, session: any) => { const refresh_token = session.getRefreshToken(); cognitoUser?.refreshSession(refresh_token, (refErr, refSession) => { const userToken = localStorage.getItem('token'); cb(userToken); }); }) }

Mientras ejecuto, obtengo el nuevo token del método getToken , pero el reintento de la misma llamada HTTP no está ocurriendo.

La ejecución de la solicitud HTTP se detiene después de obtener el token de actualización del método getToken .

¿Alguien puede ayudar con este problema?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Suponiendo que desea obtener userToken de getToken() . getToken() debería devolver algo, ahora mismo no está devolviendo nada. Si algunos métodos como getSession o refreshSession son métodos asincrónicos, también se deben esperar.

 async handle401(request: HttpRequest<any>, next: HttpHandler) { if (!this.refreshTokenInProgress) { this.refreshTokenInProgress = true; this.refreshTokenSubject.next(null); const token = await this.getToken(); // put "cb" param here, wait for returned token, then continiue this.refreshTokenInProgress = false; this.refreshTokenSubject.next(token); request = request.clone({ headers: request.headers.set('Authorization', `Bearer ${token}`) }); return next.handle(request); } else { return this.refreshTokenSubject.pipe( filter(token => token != null), take(1), switchMap((accessToken) => { request = request.clone({ headers: request.headers.set('Authorization', `Bearer ${accessToken}`) }); return next.handle(request); }) ); } } getToken(cb: any) { let poolData = { UserPoolId: environment.cognitoUserPoolId, // Your user pool id here ClientId: environment.cognitoAppClientId // Your client id here }; let userPool = new CognitoUserPool(poolData); let cognitoUser = userPool.getCurrentUser(); cognitoUser?.getSession((err: any, session: any) => { const refresh_token = session.getRefreshToken(); cognitoUser?.refreshSession(refresh_token, (refErr, refSession) => { const userToken = localStorage.getItem('token'); cb(userToken); return userToken; }); }) }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!