Задать вопрос
@prolina

Не работает interceptor angular?

Не работает interceptor в ангуляре
public intercept(
			request: HttpRequest<any>,
			next: HttpHandler,
	): Observable<HttpEvent<any>> {
			return this.authService.getAuthorizationToken().pipe(
				tap(token => this.authService.token = token),
				mergeMap(token => {
					console.log('this.auth.newAccessToken:', this.authService.token);
					const newRequest = request.clone({
						setHeaders: {
							Authorization: `Bearer ${token}`
						}
					});
					console.log('newRequest.headers.get("Authorization"):', newRequest.headers.get('Authorization'));
					return next.handle(newRequest);
				})
			);
}

authService

public getAuthorizationToken(): Observable<IdentityToken> {
		const publicId: string = this.getPublicId();

		return this.apiBaseService
			.get<IdentityToken>(`identity/token?publicId=${publicId}`)
	}


Вывод в консоль никогда не сработает
  • Вопрос задан
  • 308 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Xuxicheta
@Xuxicheta Куратор тега Angular
инженер
Вы хотите перед каждым запросом ходить на бэкенд за токеном, или что? Непонятно что происходит тут.
У меня интерцептор на токен сделан максимально просто.
export class AuthInterceptor implements HttpInterceptor {
  constructor(
    private authState: AuthState,
  ) { }

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle( req.clone({
      headers: req.headers.set('Authorization', `Bearer ${this.authState.getValue().token}`),
    }));
  }
}


т.е. из сервиса только забирается токен, без лишних подписок и запросов.
Первый токен получается из запроса при старте приложения, обновляется в самих запросах.

Если нет синхронного метода получения, то надо cделать
this.authService.getAuthorizationToken().pipe(
  take(1),
  switchMap(token => next.handle(this.makeNewRequest(token))
)


Вот этого вот
tap(token => this.authService.token = token), вообще в интерцепторе быть не должно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы