2

我有一个 post 方法正在工作并从服务器获取我的令牌

authenticate() {
  let url = this.server + 'authenticate';
  let headers = new Headers({ 'Content-Type': 'application/json' });
  let options = new RequestOptions({ headers: headers });

  let body = JSON.stringify({
    'password': 'admin',
    'rememberMe': true,
    'username': 'admin'
  });
  return this._http.post(url, body, options)
    .map((res: Response) => res.json())
    .subscribe(result => this.token = result.id_token);
}

其中this.server是具有服务器 url 的字符串。并且this._http只是 Angular Http 的一个实例

private _http: Http;
constructor(http: Http) {
  this._http = http;
}

并且this.token只是一个空字符串private token: string;

现在这一切工作得很好,我从服务器获得了正确的令牌。我的问题是,当我尝试在 get 方法中使用此令牌时,它不起作用,并且出现 401(未经授权)错误。

我的错误获取方法是:

getData(src) {
  let url = this.server + src;
  let headers = new Headers({'Authorization': 'Bearer ' + this.token});
  return this._http.get(url, headers)
  .map((res: Response) => res.json())
  .subscribe(res => console.log('res'));
}
4

2 回答 2

1

Http.get 接受一个 url 字符串和一个可选的 RequestOptionsArgs 作为参数。将标头包装在 RequestOptions 对象中应该可以解决问题。

getData(src) {
  let url = this.server + src;
  let headers = new Headers({'Authorization': 'Bearer ' + this.token});
  let options = new RequestOptions({ headers: headers });
  return this._http.get(url, options)
    .map((res: Response) => res.json())
    .subscribe(res => console.log('res'));
}
于 2016-07-08T18:31:22.330 回答
1

所以问题是我应该{}在发送标题时添加它们。得到应该是this._http.get(url, { headers })

于 2016-07-11T08:53:45.480 回答