Я использую перехватчик для добавления токенов в мои запросы.
Работает нормально. Но если срок действия токена истек, а запрос возвращает 401, я вызываю мой API, чтобы обновить токен и получить новый, и он тоже работает нормально.
И так в случае успеха, я сбрасываю заголовки иобработайте мой новый запрос с новым токеном авторизации в заголовках, но он просто пуст.
Карта заголовков пуста, и все свойства находятся в свойстве заголовков "lazyUpdate". Итак, мой новый запрос с новым действительным токеном не имеет заголовков запроса и заканчивается ошибкой 401.
private sendRequest(
request: HttpRequest<any>,
next: HttpHandler,
cache: CacheService
): Observable<HttpEvent<any>> {
return next.handle(request)
.pipe(
tap((event: HttpEvent<any>) => {
if (event instanceof HttpResponse) {
if (cache.cachedRoute.find(route => request.url.includes(route))) {
cache.put(request, event);
}
}
}, (err) => {
if (err instanceof HttpErrorResponse) {
// access token has expired
if (this.currentUser) {
if (err.status === 401 && !request.urlWithParams.includes('/login')) {
// Store requests into refresh requests cache
this.requestsRefreshService.put(request);
// Cancel all requests before token has been refreshed
this.cancelService.cancelPendingRequests();
// forbidden, so refresh_token
this.authenticationService.refresh_token(this.currentUser.refresh_token, 'refresh_token')
.subscribe(
data => {
this.revoked = false;
for (let requestRefresh of Array.from(this.requestsRefreshService.cacheRefresh.keys())) {
const headers = requestRefresh.headers.set('Authorization', `Bearer ${this.currentUser.access_token}`);
requestRefresh = requestRefresh.clone({ headers });
console.log(requestRefresh);
// This is where it's not working ! Why doesn't my request have any headers when i've been resetting them ?
return next.handle(requestRefresh);
}
},
error => {
// refresh_token has expired
// Remove user & client from local storage
this.authenticationService.deleteCurrentUser();
this.router.navigate([this.localizeService.translateRoute('/connexion')], { queryParams: { token: 'revoked' } });
}
);
}
} else {
// No user logged : redirect to login
this.authenticationService.deleteCurrentUser();
this.router.navigate([this.localizeService.translateRoute('/connexion')], { queryParams: { token: 'revoked' } });
}
}
})
);
}
Мой запрос должен иметь новые заголовки с правильным токеном аутентификации, но вместо этого больше нетЗаголовки, и я просто не понимаю, чего мне не хватает?