1
我正在使用angular2和ionic 2s框架存储。我打了几个电话给我的API,在他们面前我打电话refresh()
函数刷新令牌,如果需要的话。Token在HTTP请求之前刷新,但新的令牌未与请求一起发送
问题的一个示例:用户在搜索栏中开始键入“AB”并且令牌过期。用户现在键入“C”,refresh()
被调用,但不会与请求一起发送令牌,但如果用户在提供令牌后立即按下“D”,则我的猜测是在令牌之后正在调用API从存储已经被删除,但它被保存
get(): Promise<any> {
return this.storage.get('token_id').then(token_id => {
this.token_id = token_id;
});
}
set(token_id) {
this.storage.set('token_id', token_id);
}
refresh(): Observable <any> {
let obs = Observable.fromPromise(this.get())
.filter(() => this.jwtHelper.isTokenExpired(this.token_id))
.flatMap(() => this.authHttp.get('http://api.app/api/refresh?token_id=' + this.token_id));
obs.subscribe((response: Response) => {
this.token_id = response.json().token_id;
this.set(this.token_id);
}, (error: Response) => {
console.log(error);
});
return obs;
}
服务,使调用刷新订阅了搜索()调用
search(key): Observable<any> {
this.userService.refresh();
return this.authHttp.get('http://' + keyword)
.map(
(response: Response) => {
return response.json();
},
(error: Error) => {
console.log(error);
}
);
}
组件之前,()调用
onSearch(event)
{
let key = event.target.value;
this.searchService.search(key)
.subscribe(
(prods: SearchInterface[]) => this.prods = prods,
(error: Response) => {
}
);
}
当如果令牌到期,则服务器将用401或403错误代码响应搜索API调用获得令牌。因此,如果您在调用刷新令牌后在搜索api调用上收到该错误,则只需再次调用相同的搜索API即可。 – SAJ