2012-06-08 15 views
6

Estoy tratando de usar Backbone.js modelos para guardar en mi aplicación web Yii pero obtengo una respuesta "El token CSRF no se pudo verificar" incluso cuando el modelo está serializado formulario y yo uso Backbone.sync para establecer un encabezado.Contabilizando framework Yii PHP usando Backbone.js

El modelo (la forma tiene el token CSRF en él y la envía como un atributo "YII_CSRF_TOKEN"):

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

JSON serializador:

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

El 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); 
}; 

También he intentado configurar el encabezado como 'X_CSRF_TOKEN', en vano.

+0

¿funciona bien con no xhr POST-petición? – theotheo

Respuesta

0

YII_CSRF_TOKEN no es un encabezado, solo tiene un valor de formulario. Según this línea nuestra solicitud tiene que contener

  • una cookie CSRF, que ya está establecido por primera vez, carga de la página no XHR
  • el valor formulario de datos denominado YII_CSRF_TOKEN
0

Si está trabajando en localhost, es posible que necesite configurar un host virtual para poder realizar la autenticación de cookies como se indica en este hilo: this thread

IE y Chrome no acepta las cookies de localhost por lo que podría ser la razón