Javascript 在Angular 2中处理过期cookie
我正在尝试Angular 2,并尝试使用document.cookie作为我的访问令牌存储 我所做的是设置一个带有accesstoken的cookie,过期时间为30分钟。现在,应用程序将在加载时设置cookie,以便后续的api过程可以很好地处理到30分钟。我的问题是我想检查cookie是否过期,然后获取新的accesstoken将其设置为cookie并调用相应的方法 这是我的密码Javascript 在Angular 2中处理过期cookie,javascript,cookies,angular,observable,Javascript,Cookies,Angular,Observable,我正在尝试Angular 2,并尝试使用document.cookie作为我的访问令牌存储 我所做的是设置一个带有accesstoken的cookie,过期时间为30分钟。现在,应用程序将在加载时设置cookie,以便后续的api过程可以很好地处理到30分钟。我的问题是我想检查cookie是否过期,然后获取新的accesstoken将其设置为cookie并调用相应的方法 这是我的密码 import { Injectable } from '@angular/core'; import { Htt
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.\u accessToken.getToken()
方法向端点发出http.post请求并获取accessToken。
然后,this.\u accessToken.setCookie()
方法将document.cookie设置为accessToken,过期时间为30分钟
我不确定在cookie过期时如何对fetchData()
方法进行排序,以便它首先获取accesstoken并将其设置为cookie,然后只调用请求
方法
谢谢只需将呼叫移动到
订阅(…)
回调中即可
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 {
这听起来不像是一个安全的解决方案。我认为您应该更喜欢Angular2 JWT()之类的东西,其中客户端中的JS甚至无法访问令牌,但它仍然会随每个请求一起发送到服务器。另请看,(我不知道什么包最适合TS,因为我自己只使用Dart)。我也这么认为。这只是一个实验。考虑一下,因为这个过程是用于身份验证的,所以您认为如果我使api调用请求同步,这是一个好主意吗。你知道如何使http.get同步吗?没有办法使它同步。太糟糕了。那么,我该如何应对这种情况,以便在任何呼叫之前检查过期的cookies呢。谢谢。