从拦截器发出HTTP请求

时间:2020-04-09 06:13:41

标签: angular interceptor

Objective-访问令牌包含在请求中,以查看特定于用户的内容(例如配置文件,订单等)。现在,当从角度应用请求此类资源时,我正在检查访问令牌的有效性以及是否有效过期,然后从后端在拦截器中从后端返回特定代码-ERR_TKN_EXP,我检查此错误代码,并因此希望触发http请求以在后端上生成新令牌。这里的HTTP请求不是从Interceptor初始化的。

我尝试过的:

拦截器:

return next.handle(request).pipe(catchError(err => {

      //const error = err.error.message || err.statusText;

      const resError = err.error;

      // Handle token expired case to generate a new token
      if (err.status === 401 && resError.error.code == 'ERR_TKN_EXP') {
        this.authService.refreshToken();


      }
  }))

AuthService-refreshToken函数。

 refreshToken(){

    this.generate_ac_tkn = true;

    let refTokenParams = {
      'auth-token' : this.ac_tkn,

    }

    alert("refreshToken");

    return  this.http.post(API_END_POINT + 'refresh-token', refTokenParams, {withCredentials: true})
    .map((res: Response) => {
      alert("refreshToken-Call");

    });
  }

根据上述代码,当服务器返回ERR_TKN_EXP代码时,拦截器将检查此代码,并相应地调用函数以刷新令牌。当我尝试跟踪问题时,“ refreshToken ”发出了警报,但没有看到“ refreshToken-Call ”的警报框,这意味着没有发生http发布请求。 / p>

任何人都可以建议这里出了什么问题。

谢谢。

1 个答案:

答案 0 :(得分:0)

实际上,refreshToken方法确实返回了一个Observable,但是您没有subscribe返回它,因此它不运行。

更改拦截器,使其也进一步传递refreshToken的返回值。然后,Angular将在内部订阅拦截器的返回值。

return next.handle(request).pipe(catchError(err => {
  const resError = err.error;

  if (err.status === 401 && resError.error.code == 'ERR_TKN_EXP') {
    return this.authService.refreshToken();
  }

  return EMPTY;
}))
相关问题