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);
}
}
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
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});
}