На самом деле в вашем решении есть пара вещей, которые не нужны.
Я вставил ниже то, что сделал, и проверил, что оно работает правильно (и вы можете видеть данные авторизации в запросах файлов перевода).
Первый выпуск: InterceptorUtil.getInterceptorParam(USE_CLIENT_TOKEN, request.headers)
вам не нужно это проверять. Если вам всегда нужны данные аутентификации для запросов на перевод, просто используйте return this.authService.getClientToken();
Вторая проблема: в методе intercept
вы не покрывали случаи для любого другого запроса, кроме перевода. Из-за этого здесь будет зависать запрос токена клиента, потому что он будет ждать токена и так далее. Если вы добавите опцию для любого другого случая, кроме i18n, он начнет работать так, как вы предполагали.
Рабочее решение:
@Injectable({ providedIn: 'root' })
export class TranslationsInterceptor implements HttpInterceptor {
constructor(private authService: AuthService) {}
intercept(
request: HttpRequest<any>,
next: HttpHandler
): Observable<HttpEvent<any>> {
if (request?.url?.includes('i18n')) {
return this.getClientToken().pipe(
take(1),
switchMap((token: ClientToken) => {
if (token) {
request = request.clone({
setHeaders: {
Authorization: `${token.token_type} ${token.access_token}`,
},
});
}
return next.handle(request);
})
);
} else {
return next.handle(request);
}
}
private getClientToken(): Observable<ClientToken> {
return this.authService.getClientToken();
}
}