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发布请求。
谁能建议这里出什么问题了。
谢谢。
refreshToken
方法实际上确实返回了一个Observable
,但您没有对其返回subscribe
,因此它不会运行。
更改拦截器,使其也进一步通过refreshToken
的返回值。然后,Angular将在内部订阅拦截器的返回值。