CSRF cookie未设置错误

时间:2016-11-17 08:42:13

标签: jquery ajax django django-csrf

我在django上开发了一个项目,其中AJAX发布请求被发送到服务器。 我在ajax中使用了csrf标记,我的项目运行得很好。 当我将项目复制到另一台机器并在那里运行时,问题就来了。 出现以下错误:

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 ver 1.10),并且无法在任何其他计算机上运行(版本1.9.4)

1 个答案:

答案 0 :(得分:0)

只需在settings.py

中将$ionicPush.saveToken()更改为CSRF_COOKIE_SECURE = True即可

请参阅:

问题已在以下链接中得到解答

Django-Set-Cookie