2012-06-08 30 views
6

Tôi đang cố gắng sử dụng các mô hình Backbone.js để lưu vào ứng dụng web Yii của mình nhưng tôi nhận được phản hồi "Mã thông báo CSRF không thể xác minh" ngay cả khi mô hình được sắp xếp theo thứ tự và tôi sử dụng Backbone.sync để đặt tiêu đề.Đăng lên khung công tác PHP của Yii bằng Backbone.js

Mô hình này (hình thức có CSRF token trong nó và gửi nó như một thuộc tính "YII_CSRF_TOKEN"):

var v = new ModelName ($('.formclass').serializeJSON()); 

JSON serializer:

//form.serializeJSON 
(function($){ 
$.fn.serializeJSON=function() { 
var json = {}; 
jQuery.map($(this).serializeArray(), function(n, i){ 
json[n['name']] = n['value']; 
}); 
return json; 
}; 
})(jQuery); 

Các backbone.sync:

Backbone.old_sync = Backbone.sync; 
    Backbone.sync = function(method, model, options) { 
    var new_options = _.extend({ 
     beforeSend: function(xhr) { 
      console.log('backbone sync'); 
      var token = model.get('X_CSRF_TOKEN'); 
      console.log('token ='+token) 
      if (token) xhr.setRequestHeader('YII_CSRF_TOKEN', token); 
     } 
    }, options) 
     Backbone.old_sync(method, model, new_options); 
}; 

Tôi cũng đã thử đặt tiêu đề là 'X_CSRF_TOKEN', không có kết quả.

+0

Liệu nó hoạt động tốt với những người không XHR POST-yêu cầu? – theotheo

Trả lời

0

YII_CSRF_TOKEN không phải là tiêu đề, nó chỉ là giá trị biểu mẫu. Theo this dòng yêu cầu chúng tôi phải chứa

  • một cookie CSRF, nó đã được thiết lập bằng cách đầu tiên, tải trang phi XHR
  • giá trị hình thức dữ liệu có tên YII_CSRF_TOKEN
0

Nếu bạn đang làm việc trên máy chủ cục bộ, bạn có thể cần phải thiết lập Máy chủ ảo để có thể thực hiện xác thực cookie như đã nêu trong chuỗi này: this thread

IE và Chrome không chấp nhận cookie từ localhost do đó có thể là lý do

Các vấn đề liên quan