2016-02-05 63 views
3

我想将csrftoken从node.js传递到django。我有这样的代码在我的server.js从节点js到django的csrf问题

socket.on('unread global', function (data) { 
var values=querystring.stringify(); 

var options = { 
    hostname:'localhost', 
    port:'8000', 
    path:'/chat/global_unread/', 
    method:'POST', 
    headers:{ 
    'Content-Type':'application/x-www-form-urlencoded', 
    'Cookie': 'csrftoken=' + data.csrf, 
    'Content-Length':values.length 
} 
} 

我的数据来自调用我的server.js

var datos = { // datos is the data that will be send to Node.js 

     user: USER_PK_CHAT, 
     csrf : window.CSRF_TOKEN 

     }; 

    socket.emit('unread global', datos); 

但最后我总是得到同样的错误一个jQuery函数

CSRF token missing or incorrect. 
012:在我的控制台失败

给出的原因

在一般情况下,当有一个真正的跨站请求伪造这可能发生,或者当

对于POST形式,则需要 保证:

您的浏览器是否接受Cookie ...等等 可以帮我吗?

+0

最有可能的令牌不正确。您需要检查初始请求的更多细节以检索令牌。 – Yeo

+0

Django和node.js几乎可以肯定地使用不同的机制来生成CSRF令牌。 –

回答

0

的CSRF中间件查找以下COOKIE:

request.COOKIES[settings.CSRF_COOKIE_NAME] 

,并将其与该POST csrfmiddlewaretoken。

所以,你必须确保调用节点设置正确的cookie名称:

'Cookie': 'csrftoken=' + data.csrf` 

而且也,谓之柱包括csrfmiddlewaretoken。在JavaScript中访问COOKIE是安全的,并将其作为正确的标记发送,只要确保使用CSRF_COOKIE_SECURE即可。更好的方法是让django将令牌作为输入字段,并分别设置cookie。