设置Cookie标头忽略

时间:2017-02-01 18:24:40

标签: javascript angular express cookies

我的后端发送的csrf cookie似乎被浏览器忽略了。

Request and Response

请求来自http://localhost.mydomain.com:4200的Angular(2),如此:

get() {
  let headers = new Headers({
    'Content-Type'    : 'application/json',
    'withCredentials' : true
  });
  let options = new RequestOptions({headers : headers});
  return this.http.post('https://api.mydomain.com', {
    o : 'csrf',
    m : 'get',
    p : {}
  }, options)
    .map((res: Response) => {
      console.log('response received: ', res)
    })
    .catch((err: any) => {
      console.log('error received: ', err);
      return Observable.throw(err);
    });
}

运行Express 4.x的AWS API Gateway / Lambda正在收到请求,并将其发送回:

res.cookie('csrf', token, {domain : '.mydomain.com'});

在xhr响应上设置cookie应该没问题。因为请求和响应都是mydomain.com的子域,所以我不需要withCredentials选项(但是,如图所示,我还是尝试发送它)。收到响应,标题就在那里。它没有被设定。

在Chrome,Firefox和IE中被忽略了,所以我确定问题是我错过了一些明显的东西:)

1 个答案:

答案 0 :(得分:0)

对于任何偶然发现@robertklep和@charliefl的人都是正确的(谢谢!)。写我的请求的正确方法是:

cell.myPhoto.contentMode = .center
cell.myPhoto.af_setImage(withURL: imageURL, placeholderImage: #imageLiteral(resourceName: "placeholderImg"), filter: filter, completion: { (response) in
    cell.myPhoto.contentMode = .scaleToFill
})

另外,因为我试图在我的服务器上的get() { let headers = new Headers({ 'Content-Type' : 'application/json' }); let options = new RequestOptions({ headers : headers, withCredentials: true }); return this.http.post('https://api.mydomain.com', { o : 'csrf', m : 'get', p : {} }, options) .map((res: Response) => { console.log('response received: ', res) }) .catch((err: any) => { console.log('error received: ', err); return Observable.throw(err); }); } 中懒惰并使用通配符,所以我遇到了错误:

'Access-Control-Allow-Origin'

如果您有多个域使用您的API,则必须按照herehere的说明在您的服务器上动态设置 A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true ,具体取决于您想要的域/子域允许。