【发布时间】:2023-03-18 06:45:01
【问题描述】:
Objective- 访问令牌包含在请求中,以查看用户特定的内容,如个人资料、订单等。现在,当从 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 post 请求。
谁能指出这里出了什么问题。
谢谢。
【问题讨论】:
-
您没有订阅
.refreshToken()方法,因此它不会运行。只需写return this.authService.refreshToken();就可以了。 -
太好了,谢谢菲利普。你的回答解决了我的问题。
-
不客气。我会将其添加为官方答案,以便您接受。
标签: angular interceptor