【问题标题】:Accessing cookie with Angular or Javascript使用 Angular 或 Javascript 访问 cookie
【发布时间】:2013-08-30 15:31:06
【问题描述】:

我创建了一个 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.xml 中设置这个 cookie。

请求从127.0.0.1:8000发送到127.0.0.1:8080;我使用这个middleware 来处理 CROS 请求,我还设置了:

SESSION_COOKIE_HTTPONLY = False

【问题讨论】:

    标签: django angularjs


    【解决方案1】:

    有问题的行是:

     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

    【讨论】:

    • 遗憾的是它不起作用...我将“*”更改为 127.0.0.1,但未设置 cookie :(
    【解决方案2】:

    好的,感谢 Bqm 到 mozilla 的链接,我终于找到了未设置 cookie 的原因。

    确实需要在发送的标头中设置:

    Access-Control-Allow-Credentials: true
    

    在 Angular 中,这是通过以下方法完成的:

    $http(
                {
                    method: 'POST',
                    url: '/api/v1/user/auth',
                    data: user,
                    withCredentials: true
                }
            )
    

    一旦您的后端使用 setCookie 进行响应,浏览器就可以在您的浏览器中设置 cookie。

    【讨论】:

      猜你喜欢
      • 2013-07-02
      • 2015-05-30
      • 1970-01-01
      • 2014-01-14
      • 2020-09-08
      • 2011-06-17
      • 1970-01-01
      • 2012-03-17
      • 2017-01-27
      相关资源
      最近更新 更多