我正在尝试使用Angular 2,并尝试使用document。Cookie作为我的访问令牌存储
我所做的是设置一个cookie与accesstoken &30分钟过期。现在应用程序将设置cookie加载,因此后续api进程处理得很好,直到30分钟。我的问题是我想检查cookie是否过期,然后获取新的accesstoken,将其设置为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。向端点发送请求并获得一个accesstoken。然后this._accessToken.setCookie()
方法设置一个文档。访问权限和过期时间为30分钟的Cookie。
我不知道我如何去排序fetchData()
方法在cookie过期的情况下,使它首先得到accesstoken设置它为cookie,然后只调用request
方法。
谢谢
将调用移动到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 {