2016-11-17 124 views
0

我已經開發了一個項目,在Django中發送AJAX請求發送到服務器。 我在ajax中使用了csrf標記,我的項目運行得很好。 當我將我的項目複製到另一臺機器並在那裏運行時,問題就出現了。 以下錯誤出現:CSRF cookie未設置錯誤

Forbidden (CSRF cookie not set.) 

兩臺機器上運行得很好,有Django的幾乎相同的配置。有沒有人有任何想法這個問題出現? 以下是我的ajax:

var csrftoken = Cookies.get('csrftoken'); 

    function csrfSafeMethod(method) { 
    // these HTTP methods do not require CSRF protection 
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); 
    } 

    $.ajaxSetup({ 
    beforeSend: function(xhr, settings) { 
     if (!csrfSafeMethod(settings.type) && !this.crossDomain) { 
     xhr.setRequestHeader("X-CSRFToken", csrftoken); 
     } 
    } 
    }); 

    var $chatlog = $('.js-chat-log'); 
    var $input = $('.js-text'); 
    var $sayButton = $('.js-say'); 

    function createRow(text) { 
    var $row = $('<li class="list-group-item"></li>'); 

    $row.text(text); 
    $chatlog.append($row); 
    } 

    function submitInput() { 
    var inputData = { 
     'text': $input.val() 
    } 

    // Display the user's input on the web page 
    createRow(inputData.text); 

    var $submit = $.ajax({ 
     type: 'POST', 
     url: chatterbotUrl, 
     data: JSON.stringify(inputData), 
     contentType: 'application/json' 
    }); 

    $submit.done(function(statement) { 
     createRow(statement.text); 

     // Clear the input field 
     $input.val(''); 
    }); 

    $submit.fail(function() { 
     // TODO: Handle errors 
    }); 
    } 

    $sayButton.click(function() { 
    submitInput(); 
    }); 

    $input.keydown(function(event) { 
    // Submit the input when the enter button is pressed 
    if (event.keyCode == 13) { 
     submitInput(); 
    } 
    }); 

請注意,項目運行一臺機器上完全沒問題(Django的1.10版),並且不能運行任何其他機器上(版本1.9.4)

+0

您是否提到過

{%csrf_token%}
?? @jatinbhola – PassionInfinite

+0

我不使用表單發送請求。通過單擊按鈕發送請求 –

+0

您使用安全(https)url還是本地? – PassionInfinite

回答

0

只要改變CSRF_COOKIE_SECURE = TrueCSRF_COOKIE_SECURE = False在settings.py

請參見:

問題已經有了答案下面鏈接

Django-Set-Cookie

+0

試過了。 Stll同樣的問題:( –

+0

檢查cookie是否設置與否,我認爲你沒有使用它跨域。@Jatin – PassionInfinite