Я реализовал AuthTokenInterceptor, как показано ниже. Моя проблема в том, что токен авторизации не может быть перенаправлен на серверную сторону правильно. Я уверен, что смогу получить токен аутентификации request.headers.get («Авторизация») непосредственно перед передачей запроса в next.handler ().
Я обнаружил, что запрос был отправлен дважды, у первого не было заголовка авторизации, но у второго был заголовок.
Я удалил повторную попытку из канала, но по-прежнему отправляются два запроса на сторону сервера.
Существует особый случай для моего проекта. Я использовал сторонний инструмент i18n, и он требует старого HttpModule из «@ angular / http». Поэтому я импортирую как HttpModule, так и HttpClientModule.
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (this.authService.getAccessToken()) {
request = this.addToken(request);
}
return next.handle(request).pipe(catchError(error => {
if (error instanceof HttpErrorResponse
&& ( error.status === 401 || error.status == 403) ) {
if ( error.status == 401 )
return this.handle401Error(error, request, next);
else
return this.handle403Error(error, request, next);
} else {
return throwError(error);
}
}));
}
private addToken(request: HttpRequest<any>): HttpRequest<any> {
const tokenName = this.authService.getAuthorizationTokenName();
const tokenValue = this.authService.getAuthorizationTokenValue();
// Clone the request and replace the original headers with
// cloned headers, updated with the authorization.
const authReq = request.clone({
headers: request.headers.set(tokenName, tokenValue)
});
return authReq;
}