我正在使用angular2和ionic 2s框架存储。我多次调用我的API,在它们之前我调用refresh()
函数来刷新令牌,如果需要的话。
问题的一个例子:用户开始输入" 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;
}
进行调用refresh()
的调用的服务search(key): Observable<any> {
this.userService.refresh();
return this.authHttp.get('http://' + keyword)
.map(
(response: Response) => {
return response.json();
},
(error: Error) => {
console.log(error);
}
);
}
订阅search()调用的组件
onSearch(event)
{
let key = event.target.value;
this.searchService.search(key)
.subscribe(
(prods: SearchInterface[]) => this.prods = prods,
(error: Response) => {
}
);
}
答案 0 :(得分:0)
登录成功后,您需要将令牌保存在localStorage中。
localStorage.setItem("token", this.token);
您可以使用
获取令牌localStorage.getItem("token")