Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Angular 2中处理过期cookie_Javascript_Cookies_Angular_Observable - Fatal编程技术网

Javascript 在Angular 2中处理过期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

我正在尝试Angular 2,并尝试使用document.cookie作为我的访问令牌存储

我所做的是设置一个带有accesstoken的cookie,过期时间为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.\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呢。谢谢。