我的后端发送的csrf cookie似乎被浏览器忽略了。
请求来自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中被忽略了,所以我确定问题是我错过了一些明显的东西:)
答案 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,则必须按照here和here的说明在您的服务器上动态设置 A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true
,具体取决于您想要的域/子域允许。