Angular 角度HttpInterceptor RangeError:超出最大调用堆栈大小

Angular 角度HttpInterceptor RangeError:超出最大调用堆栈大小,angular,access-token,angular-httpclient,bearer-token,angular-http-interceptors,Angular,Access Token,Angular Httpclient,Bearer Token,Angular Http Interceptors,我的HttpInterceptor在短时间内多次调用时遇到问题,导致错误:RangeError:超出了最大调用堆栈大小 我的HttpInterceptor正在拦截向标头添加承载令牌的每个请求。当它第一次通过拦截器时,它将从身份验证服务器获取令牌,这将在短时间内导致对身份验证程序的许多POST调用。我猜这是因为当它的头中没有承载令牌时,拦截器将调用HttpClient,导致再次向拦截器传递true,并继续调用GetAuthToken(),导致循环,直到错误发生 我试图忽略标题中带有标志的请求,但它

我的HttpInterceptor在短时间内多次调用时遇到问题,导致错误:RangeError:超出了最大调用堆栈大小

我的HttpInterceptor正在拦截向标头添加承载令牌的每个请求。当它第一次通过拦截器时,它将从身份验证服务器获取令牌,这将在短时间内导致对身份验证程序的许多POST调用。我猜这是因为当它的头中没有承载令牌时,拦截器将调用HttpClient,导致再次向拦截器传递true,并继续调用GetAuthToken(),导致循环,直到错误发生

我试图忽略标题中带有标志的请求,但它仍在循环。你对如何解决这个问题有什么建议吗


intercept(req:HttpRequest

您的拦截器会对所有内容进行intercep,甚至您在GetAuthToken中的调用,您需要使用“如果”跳过GetAuthToken中的调用

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    if (req.body==`grant_type=${this.grant_type}&client_id=${this.client_id}&username=${this.username}&password=${this.password}`)
          return next.handle(req);

    ...rest of your code..
  }
GetAuthToken(){
   ...
   let options = {
      headers: httpHeaders.Add("skip",true)
    };
   ...
}
GetAuthToken(){
   ...
   let options = {
      headers: httpHeaders.Add("skip",true)
    };
   ...
}