从节点js到django的csrf问题

时间:2016-02-05 19:04:18

标签: javascript jquery django node.js

我想将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帮我吗?

1 个答案:

答案 0 :(得分:0)

CSRF中间件寻找以下COOKIE:

request.COOKIES[settings.CSRF_COOKIE_NAME]

并将其与POST csrfmiddlewaretoken进行比较。

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

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

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