我创建了一个API / user / auth,我可以使用POST发送一个Json对象,如:
var user = {"username":"alex", "password":"m"}
$http(
{
method: 'POST',
url: '/api/v1/user/auth',
data: user,
}
).
success(function(data, status, headers, config) {
console.log(data)
}).
error(function(data, status, headers, config) {
// called asynchronously if an error occurs
// or server returns response with an error status.
});
Django的回应如下:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Content-Type,*
Access-Control-Allow-Methods:POST,GET,OPTIONS,PUT,DELETE
Access-Control-Allow-Origin:*
Content-Language:fr
Content-Type:application/json
Date:Fri, 30 Aug 2013 15:22:01 GMT
Server:WSGIServer/0.1 Python/2.7.5
Set-Cookie:sessionid=w63m0aoo8m3vfmvv0vk5d6w1708ftsrk; Path=/
Vary:Accept, Accept-Language, Cookie
所以Django返回一个好的cookie,但我不知道为什么,Chrome不会在Resource中设置这个cookie。
请求从127.0.0.1:8000发送到127.0.0.1:8080;我使用此middleware来处理CROS请求,我还设置了:
SESSION_COOKIE_HTTPONLY = False
答案 0 :(得分:0)
有问题的一行是:
Access-Control-Allow-Origin: *
凭据请求不适用于通配符允许来源。您必须专门设置名称,例如:
Access-Control-Allow-Origin: http://127.0.0.1:8080
您可以在此处找到更多信息:
答案 1 :(得分:0)
好的,感谢Bqm链接到mozilla,我终于找到了为什么没有设置cookie。
确实你需要在你发送的标题中设置:
Access-Control-Allow-Credentials: true
在Angular中,这是通过以下方法完成的:
$http(
{
method: 'POST',
url: '/api/v1/user/auth',
data: user,
withCredentials: true
}
)
一旦你的后端用setCookie回答,浏览器就可以在你的浏览器中设置cookie。