Angular 2中过期cookie的处理



我正在尝试使用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 {

最新更新