【发布时间】:2018-09-20 06:02:54
【问题描述】:
短版:---
如何让 (http).post().subscription() 等待截获的响应而不是 401 响应?
---- 长版----
在我的 userHttpService 中,我有这个从组件调用的函数(使用 HttpClient):
findCostumer(companyName: string){
let data = {companyName: companyName}
return this.http.post('http://localhost/angular2/findCostumer.php', JSON.stringify(data),{responseType:'text'})
}
为了能够访问 findCostumer.php,我必须登录,因为我在拦截器中发送令牌 In 标头。
const cloned = req.clone({
headers: req.headers.set('Authorization', localStorage.getItem('jwt')).
set('refreshToken', localStorage.getItem('refreshToken'))
})
效果很好。
但是,如果 JWT 已过期,我想使用我的持久刷新令牌刷新该令牌。 这是我的全部代码:
intercept(req:HttpRequest<any>, next:HttpHandler ): Observable<HttpEvent<any>>{
if(localStorage.getItem('jwt') && localStorage.getItem('refreshToken')){
const cloned = req.clone({
headers: req.headers.set('Authorization', localStorage.getItem('jwt')).
set('refreshToken', localStorage.getItem('refreshToken'))
})
let userhttpservice = this.injector.get(UserHttpService);
return next.handle(cloned).catch(er=>{
if(!this.update && er.status == 401)
{
userhttpservice.refreshToken().mergeMap(re=>{
console.log(re)
this.update = false
let json = JSON.parse(re);
localStorage.setItem('jwt', json['jwt'])
localStorage.setItem('refreshToken', json['refreshToken'])
let cloned3 = req.clone({
headers: req.headers.set('Authorization', localStorage.getItem('jwt')).
set('refreshToken', localStorage.getItem('refreshToken'))
})
return next.handle(cloned3)
}).subscribe();
//return next.handle(cloned)
this.update = true;
}
return Observable.throw('')
})
}
else
return next.handle(req)
}
userHtppService 中的refreshToken-function:
refreshToken(){
let data = {'token':localStorage.getItem('refreshToken')};
return this.Http.post('http://localhost/angular2/refreshToken.php', JSON.stringify(data),{responseType:'text'})
}
这也很好用。然而。在 findCostumer.php 的订阅上只得到 401 响应。不是我刷新令牌后要求的。我想这与 catch()-operator 返回 Observable.throw('') 有关刷新令牌后。 如何让.subscription() 改为等待状态 200 页面?
【问题讨论】:
-
我测试了 swicthMap 和 retry()-operator 但没有成功
标签: httpclient angular5 interceptor subscription