我正在尝试使用Angular 2并尝试使用document.cookie作为我的访问令牌存储。
我所做的是设置一个带有accessstoken& amp;到期30分钟。现在应用程序将加载cookie,以便随后的api进程处理得非常好,直到30分钟。我的问题是我想检查cookie是否过期,然后获取新的accessstoken将其设置为cookie并调用相应的方法。
这是我的代码
import { Injectable } from '@angular/core';
import { Http, Response, Headers } from '@angular/http';
import { Observable, Operator} from 'rxjs/Rx';
import { AccessToken } from './access-token.service';
@Injectable()
export class DataService {
constructor(
private _accessToken : AccessToken,
private _http: Http
) {}
request(url:string){
var token = this._accessToken.readCookie();
return this._http.get(url,{
headers : new Headers({
"Authorization" : "Bearer " + token
})
})
.map(data => data.json().result)
.catch(this._handleError)
}
fetchData(dataurl:string){
var token = this._accessToken.readCookie();
if(!token){
this._accessToken.getToken()
.subscribe(
response => {
this._accessToken.setCookie(response);
}
)
// I want to call this.request() after the accesstoken has been set to the document.cookie
} else {
return this.request(dataurl)
}
}
getAllProducts(){
return this.fetchData('https://localhost/api/products');
}
private _handleError (error: Response) {
console.error(error);
return Observable.throw(error.json().error || 'Server error');
}
}
this._accessToken.getToken()
方法向端点发出http.post请求并获取accessstoken。
this._accessToken.setCookie()
方法然后设置document.cookie,其accessestoken和到期时间为30分钟。
我不确定如何对fetchData()
方法的cookie过期进行排序,以便它首先获得accessstoken将其设置为cookie然后只调用request
方法。
由于
答案 0 :(得分:1)
只需在subscribe(...)
回调
if(!token){
this._accessToken.getToken()
.subscribe(
response => {
this._accessToken.setCookie(response);
// I want to call this.request() after the accesstoken has been set to the document.cookie
}
)
} else {