在请求标头Angular2中设置Cookie

时间:2017-04-13 11:18:09

标签: angular typescript angular-http

我是angular2的新手。我的服务器(spring)在其响应头中使用set-cookie值响应身份验证。

如何将Cookie设置为下一个API调用的请求标头?

我搜索了很多,但我找不到合适的解决方案。

3 个答案:

答案 0 :(得分:10)

作为http.get() or http.post()方法的一部分,您可以指定RequestOptionsArgs

使用Headers中的RequestOptionsArgs指定您需要的身份验证标头。

作为一个粗略的例子,见下文:



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




答案 1 :(得分:4)

Cookie会自动附加到您为域名保存后进行的每次通话中。 你做错了什么。如果您想创建自动机制以将auth数据附加到REST调用,请参阅本教程以创建自定义HttpInterceptor:

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

答案 2 :(得分:1)

如果是CORS场景,则需要在RequestOptions中将withCredentials属性设置为true。以下是我在HTTP帮助程序中实现的方式摘要:



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