从拦截器发出 HTTP 请求
Make HTTP request from Interceptor
Objective- 访问令牌包含在查看用户特定内容(如个人资料、订单等)的请求中。现在,当从 angular 应用程序请求此类资源时,我正在检查对于访问令牌的有效性,如果它已过期,则 return 特定代码 - ERR_TKN_EXP 来自我的后端,在拦截器中,我检查此错误代码并因此想要触发 http 请求以生成后端的新令牌。这里的 HTTP 请求不是从拦截器初始化的。
我尝试过的:
拦截器:
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");
});
}
按照上面的代码,当服务器returns ERR_TKN_EXP代码时,拦截器检查这段代码并相应地调用函数来刷新令牌。当我试图追踪问题时,“refreshToken”收到警报,但看不到“refreshToken-Call”的警报框,这意味着 http post 请求没有发生。
谁能指出这里出了什么问题。
谢谢。
refreshToken
方法实际上 return 和 Observable
,但您没有 subscribe
它,因此它不会 运行。
更改您的拦截器,使其也进一步传递 refreshToken
的 return 值。 Angular 将在内部订阅拦截器的 return 值。
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;
}))
Objective- 访问令牌包含在查看用户特定内容(如个人资料、订单等)的请求中。现在,当从 angular 应用程序请求此类资源时,我正在检查对于访问令牌的有效性,如果它已过期,则 return 特定代码 - ERR_TKN_EXP 来自我的后端,在拦截器中,我检查此错误代码并因此想要触发 http 请求以生成后端的新令牌。这里的 HTTP 请求不是从拦截器初始化的。
我尝试过的:
拦截器:
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");
});
}
按照上面的代码,当服务器returns ERR_TKN_EXP代码时,拦截器检查这段代码并相应地调用函数来刷新令牌。当我试图追踪问题时,“refreshToken”收到警报,但看不到“refreshToken-Call”的警报框,这意味着 http post 请求没有发生。
谁能指出这里出了什么问题。
谢谢。
refreshToken
方法实际上 return 和 Observable
,但您没有 subscribe
它,因此它不会 运行。
更改您的拦截器,使其也进一步传递 refreshToken
的 return 值。 Angular 将在内部订阅拦截器的 return 值。
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;
}))