我有angular2网站,它在启动时使用Json Web Tokens发送多个ajax请求进行授权
他们是:
public getUser(): Observable<User> {
let headers = new Headers({
'Authorization': 'Bearer ' + this.authService.token.access_token,
'Accept': 'application/json',
'Content-Type': 'application/json'
});
let options = new RequestOptions({ headers: headers });
return this.http.get('http://localhost:5000/api/users/profile', options)
.map(response => response.json() as User).catch(this.handleError);
}
public getFriends(): Observable<User[]> {
let headers = new Headers({
'Authorization': 'Bearer ' + this.authService.token.access_token,
'Accept': 'application/json',
'Content-Type': 'application/json'
});
let options = new RequestOptions({ headers: headers });
return this.http.get(`http://localhost:5000/api/users/${this.authService.userId}/friends`, options)
.map(response => response.json() as User[]).catch(this.handleError);
}
等等
但我需要访问令牌才能执行此请求 我存储它并在本地存储中刷新令牌,但访问令牌在5分钟后到期
因此,当用户登录访问和刷新令牌存储在本地存储
时如果用户在登录后关闭浏览器,等待5分钟或更长时间再打开页面我们需要刷新它(使用其他请求)然后发送我们的请求
以下是主要问题:我们不知道会发送多少或哪些请求,因此我们无法对其进行硬编码
这是更新请求
public update(): Observable<boolean> {
let headers = new Headers({
'Accept': 'application/json',
'Content-Type': 'application/x-www-form-urlencoded'
});
let options = new RequestOptions({ headers: headers });
return this.http.post('http://localhost:5000/api/auth/token', "refresh_token=" + encodeURIComponent(this.token.refresh_token) + "&grant_type=refresh_token", options)
.map((response: Response) => {
let token = response.json();
if (token) {
this.token = token;
localStorage.setItem('currentUser', JSON.stringify({
token: this.token,
userId: this.userId
}));
return true;
}
else {
return false;
}
}).catch(this.handleError);
}
如果做这样的事情:
this.authService.update().flatMap(this.getUser);
它不会有帮助,因为我们会发送很多&#34;更新&#34;请求,这不会给我们带来任何好处
仅发送&#34;更新&#34;请求无法帮助,因为我们会发送一个&#34;更新&#34;以及许多其他要求
那么这个问题的解决方案是什么?