когда я получаю ошибку по истечении срока действия токена, я отправляю запрос на новый токен доступа. Я успешно получаю новый 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
}
);
}