【问题标题】:nodejs isn't getting default cookie that django sets for usersnodejs 没有得到 django 为用户设置的默认 cookie
【发布时间】:2013-08-11 23:33:20
【问题描述】:

我刚刚将一个 Web 应用程序投入生产,对我的 nodejs 的请求不再包含 Django 在我的本地主机(它工作的地方)上默认设置的用户 cookie。

我的 nodejs 会像这样查找 cookie

io.configure(function(){
    io.set('authorization', function(data, accept){
        if (data.headers.cookie) {
            data.cookie = cookie_reader.parse(data.headers.cookie);
            return accept(null, true);
        }
        return accept('error',false);
    });
    io.set('log level',1);
});

并且在本地主机上已经得到了这个

cookie: 'username="name:1V7yRg:n_Blpzr2HtxmlBOzCipxX9ZlJ9U"; password="root:1V7yRg:Dos81LjpauTABHrN01L1aim-EGA"; csrftoken=UwYBgHUWFIEEKleM8et1GS9FuUPEmgKF; sessionid=6qmyso9qkbxet4isdb6gg9nxmcnw4rp3' },

在请求头中。

但在生产中,标题是相同的,但没有更多的 cookie。 Django 只在本地主机上设置吗?我怎样才能让它在生产中工作?

我已经尝试在我的 settings.py 中设置这些

CSRF_COOKIE_DOMAIN = '.example.com'
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_HTTPONLY = False

但到目前为止还不好。

任何见解都会很棒。

【问题讨论】:

  • 你是不是也在模板中设置了模板标签csrf_token
  • 是的。开发和生产都使用相同的模板
  • 我问的不是这个。
  • 对不起,我的意思是模板标签在模板中。它适用于 localhost 而不是生产,但他们使用的是相同的模板
  • 你能看到带有萤火虫或类似的cookie吗?

标签: django node.js cookies header production-environment


【解决方案1】:

我刚刚想通了。我正在像这样在客户端上向 nodejs 发出请求

Message.socket = io.connect('http://123.456.789.10:5000');

我在哪里使用了我的 nodejs 正在侦听的各自的 IP 地址和端口。这被认为是跨域的,因此浏览器不会在请求中包含 cookie。通过将其更改为轻松修复

Message.socket = io.connect('http://www.mydomain.com:5000');

【讨论】:

    猜你喜欢
    • 2016-10-04
    • 1970-01-01
    • 2012-04-17
    • 2017-12-03
    • 2020-06-12
    • 2014-01-16
    • 2016-09-27
    • 2018-07-10
    • 1970-01-01
    相关资源
    最近更新 更多