[在角度拦截器中,我想检查是否存在身份验证令牌。如果没有,则应刷新并重新发送请求。
return next.handle(authReq).pipe(map((result: any) => {
if (result.body && result.body.error) {
if (result.body.error === 'ERR_TOKEN_EXPIRED' || result.body.error === 'ERR_TOKENS_DO_NOT_MATCH') {
console.log('Token is expired or invalid, refreshing.', result.body.error);
return this.userService.refreshLoginToken().subscribe(success => {
if (success) {
return this.intercept(req, next);
}
});
}
}
return result;
}));
问题是我不知道如何用新的替换next.handle()返回的原始Observable。 this.userService.refreshLoginToken().subscribe()
之前的return语句返回一个Subscription对象。如果我仅通过管道传递refreshLoginToken()
的结果,它将不起作用,因为refreshLoginToken发送一个httprequest,该请求仅在有订阅时才执行。
将问题简化为一行:如何将第1行中返回的Observable由next.handle()替换为this.intercept(req, next)
返回的那个?]
谢谢!
[在角度拦截器中,我想检查是否存在身份验证令牌。如果没有,则应刷新并重新发送请求。返回next.handle(authReq).pipe(map((result:any)=> {...
我认为您应该采取其他方法。