Angular 6 HttpInterceptor接口在生产时失败

问题描述 投票:2回答:1

我正在使用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);
    }

}

我的app模块

@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"

你能帮助我吗?

angular angular-http-interceptors
1个回答
0
投票

声明你的拦截器在root中提供:

@Injectable({
providedIn: 'root'

})

而不是仅使用:

@Injectable()

这意味着您的拦截器将在您的所有应用程序中可用,如果您有另一个产品模块可能是问题。

查看更多详细信息:angular providers

© www.soinside.com 2019 - 2024. All rights reserved.