Atur Cookie di Header Permintaan Angular2

Saya baru mengenal angular2. Server saya (spring) merespons otentikasi dengan nilai set-cookie dalam header responsnya.

Bagaimana cara mengatur cookie itu ke header permintaan untuk panggilan API berikutnya?

Saya banyak mencari, tetapi saya tidak dapat menemukan solusi yang cocok.

Sebagai bagian dari metode http.get() atau http.post(), Anda dapat menentukan RequestOptionsArgs

Gunakan Headers di RequestOptionsArgs untuk menentukan auth header yang Anda butuhkan.

Sebagai contoh kasar, lihat di bawah ini:

class PeopleComponent {
  constructor(http: Http) {  
    let customHeaders: Headers = new Headers();
    customHeaders.append('myHeaderName', 'myHeaderValue');

    http.get('http://my.web/service', { headers: customHeaders })   
      .map(res => res.json())
      .subscribe(people => this.people = people);
  }
}
Komentar (2)
Larutan

Cookie secara otomatis melekat pada setiap panggilan yang Anda buat setelah disimpan untuk domain Anda. Anda melakukan sesuatu yang salah. Jika Anda ingin membuat mekanisme otomatis untuk melampirkan data auth ke panggilan REST, lihat tutorial ini yang membuat HttpInterceptor khusus:

https://medium.com/aviabird/http-interceptor-angular2-way-e57dc2842462

Komentar (6)

Dalam kasus skenario CORS, Anda perlu menambahkan properti withCredentials yang disetel ke true di RequestOptions. Di bawah ini adalah cuplikan tentang bagaimana saya telah mengimplementasikannya di HTTP helper saya:

get(resource: string) {
  return this.http.get(`/api/${resource}`, this.getRequestOptions())
    .map(result => result.json())
    .catch(e => e.status === 401 ? Observable.throw('Unauthorized') : e.json());
}

post(resource: string, body: any) {
  return this.http.post(`/api/${resource}`, body, this.getRequestOptions())
    .map(result => result.json())
    .catch(e => e.status === 401 ? Observable.throw('Unauthorized') : e.json());
}

private getRequestOptions() {
  const headers = new Headers({
    'Content-Type': 'application/json',
  });

  return new RequestOptions({headers: headers, withCredentials: true});
}
Komentar (1)