2

サーバーからトークンを取得して動作しているポストメソッドがあります

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 を含む文字列です。angular Httpのthis._http単なるインスタンスです

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

そしてthis.token単なる空の文字列ですprivate token: string;

これですべて問題なく動作し、サーバーから適切なトークンを取得しています。私の問題は、get メソッドでこのトークンを使用しようとすると機能せず、401 (未承認) エラーが発生することです。

私のバグのある get メソッドは次のとおりです。

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 に答える