Неисправный интерфейс HttpInterceptor Angular 6 на производстве - PullRequest
0 голосов
/ 10 июня 2018

Я использую HttpInterceptor интерфейс для добавления заголовка авторизации на http-петиции,

@Injectable()
export class AuthInterceptor implements HttpInterceptor {

    constructor(
        private localStorage: LocalStorageService,
        private sessionStorage: SessionStorageService
    ) {
    }

    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        if (!request || !request.url || (/^http/.test(request.url) && !(SERVER_API_URL && request.url.startsWith(SERVER_API_URL)))) {
            return next.handle(request);
        }

        const token = this.localStorage.retrieve('authenticationToken') || this.sessionStorage.retrieve('authenticationToken');
        if (!!token) {
            request = request.clone({
                setHeaders: {
                    Authorization: 'Bearer ' + token
                }
            });
        }
        return next.handle(request);
    }

}

мой модуль приложения

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
      BrowserModule,
      AppRoutingModule,
      HttpClientModule,
      VistaModule,
      LayoutModule
  ],
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: AuthInterceptor,
      multi: true
    }
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

Локально работает отлично, но не работает при генерации prod dist и загружается на сервер.Любая петиция получает заголовки: Object, status: 401, statusText: "Unauthorized"

Вы можете мне помочь?

1 Ответ

0 голосов
/ 06 апреля 2019

Объявите, что ваш перехватчик будет предоставлен в корне:

@Injectable({
providedIn: 'root'

})

вместо использования просто:

@Injectable()

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

Проверьте подробности на: угловых провайдерах

...