使用Angular或Javascript访问cookie

时间:2013-08-30 15:31:06

标签: django angularjs

我创建了一个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

2 个答案:

答案 0 :(得分:0)

有问题的一行是:

 Access-Control-Allow-Origin: *

凭据请求不适用于通配符允许来源。您必须专门设置名称,例如:

Access-Control-Allow-Origin: http://127.0.0.1:8080

您可以在此处找到更多信息:

https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control#Requests_with_credentials

答案 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。