从节点js到django的csrf问题

我想将node.js中的csrftoken传递给django。 我的server.js中有这段代码

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的jquery函数

 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); 

但最后我总是在我的控制台中得到同样的错误

失败原因:

 CSRF token missing or incorrect. 

通常,当存在真正的跨站请求伪造时,或者何时发生

对于POST表单,您需要确保:

您的浏览器正在接受cookie …那么sombody可以帮助我吗?

CSRF中间件寻找以下COOKIE:

 request.COOKIES[settings.CSRF_COOKIE_NAME] 

并将其与POST csrfmiddlewaretoken进行比较。

因此,您必须确保对节点的调用在以下位置设置正确的cookie名称:

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

而且,POST包含一个csrfmiddlewaretoken 。 在javascript中访问COOKIE并将其作为正确的令牌发送是安全的,只需确保使用CSRF_COOKIE_SECURE即可。 更好的方法通常是让django将令牌作为输入字段,并分别设置cookie。