令牌在HTTP请求之前刷新,但新令牌不会随请求一起发送

时间:2017-05-31 20:56:37

标签: angular ionic-framework ionic2

我正在使用angular2和ionic 2s框架存储。我多次调用我的API,在它们之前我调用refresh()函数来刷新令牌,如果需要的话。

问题的一个例子:用户开始输入" AB"在搜索栏中,令牌过期。用户现在键入" C",refresh()被调用但是令牌不随请求一起发送,但是如果用户按下" D"在提供令牌之后,所以我的猜测是,在从存储中删除令牌之后但在保存令牌之前,正在调用API

get(): Promise<any> {
  return this.storage.get('token_id').then(token_id => {
    this.token_id = token_id;
  });
}

set(token_id) {
  this.storage.set('token_id', token_id);
}

refresh(): Observable <any> {

  let obs = Observable.fromPromise(this.get())
    .filter(() => this.jwtHelper.isTokenExpired(this.token_id))
    .flatMap(() =>  this.authHttp.get('http://api.app/api/refresh?token_id=' + this.token_id));
  obs.subscribe((response: Response) => {
    this.token_id = response.json().token_id;
    this.set(this.token_id);
  }, (error: Response) => {
    console.log(error);
  });
  return obs;
}

进行调用refresh()

的调用的服务
search(key): Observable<any> {

  this.userService.refresh();

  return this.authHttp.get('http://' + keyword)
    .map(
      (response: Response) => {
        return response.json();
      },
    (error: Error) => {
        console.log(error);
    }
    );
}

订阅search()调用的组件

onSearch(event)
{
  let key = event.target.value;

  this.searchService.search(key)
    .subscribe(
      (prods: SearchInterface[]) => this.prods = prods,
      (error: Response) => {
      }
    );
}

1 个答案:

答案 0 :(得分:0)

登录成功后,您需要将令牌保存在localStorage中。

localStorage.setItem("token", this.token);

您可以使用

获取令牌
localStorage.getItem("token")