2016-02-05 65 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。