повторно инициировать неудавшийся запрос из-за истечения срока действия токена доступа после предоставления нового refre sh токена - PullRequest
0 голосов
/ 06 марта 2020

когда я получаю ошибку по истечении срока действия токена, я отправляю запрос на новый токен доступа. Я успешно получаю новый access_token, но мне не удается повторно отправить предыдущие неудачные запросы.

import { Injectable } from '@angular/core';
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpClient } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';
import { AuthenticationService } from './authentication.service';
import { environment } from 'src/environments/environment';


@Injectable({
  providedIn: 'root'
})
export class ErrorInterceptorService implements HttpInterceptor {

  constructor(private authenticationService: AuthenticationService, public http: HttpClient,
) { }

    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        return next.handle(request).pipe(catchError(err => {
          console.log("error interceptor" , err);
            if (err.error.http_status === 403) {
                console.log("status code");
                    this.authenticationService.getAccessToken();

            }

            const error = err.error.message || err.statusText;
            return throwError(error);
        }))
    }
}

служба аутентификации

вот моя служба аутентификации: метод получения маркера доступа

getAccessToken(){
    let token = JSON.parse(localStorage.getItem('currentUser'));
    console.log("refreshToken" ,token.refresh_token);
    this.currentUserSubject.next(token.refresh_token);
    let reqHead = new HttpHeaders({
      Authorization: `Bearer ${token.refresh_token}`,
      'x-api-key': environment.XAPIKEY,
      'app_id': environment.AUTHAPIKEY
    });

    return this.http.get(environment.AUTHAPI + '/auth/token' ,{ headers: reqHead}).subscribe(
      (data: any) => {
        console.log("data" ,data);
        //If reload successful update tokens
          //Update tokens

          localStorage.removeItem('currentUser');
           data.refresh_token = token.refresh_token 
          localStorage.setItem("currentUser", JSON.stringify(data));
          this.currentUserSubject.next(data);
          //Clone our fieled request ant try to resend its

      }
    );

  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...