从拦截器发出HTTP请求

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

Objective-Access令牌包含在请求中,以查看特定于用户的内容,例如配置文件,订单等。现在,当从angular应用请求此类资源时,我正在检查访问令牌的有效性以及是否过期,然后从我的后端返回特定代码-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发布请求。

谁能建议这里出什么问题了。

谢谢。

angular interceptor
1个回答
0
投票

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

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

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