使用Backbone.js发布Yii PHP框架

6
我正在尝试使用Backbone.js模型保存到我的Yii web应用程序,但是我得到了一个“无法验证CSRF令牌”的响应,即使模型是序列化的表单,并且我使用Backbone.sync设置了一个头部。
模型(表单中有CSRF令牌,并将其作为“YII_CSRF_TOKEN”属性发送):
var v = new ModelName ($('.formclass').serializeJSON()); 

JSON序列化器:

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

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

我还尝试将标头设置为“X_CSRF_TOKEN”,但没有成功。


非 XHR POST 请求可以正常工作吗? - theotheo
3个回答

0

YII_CSRF_TOKEN 不是一个头部信息,而只是一个表单值。 根据this的代码行,我们的请求必须包含:

  • 一个CSRF cookie,这已经在第一次非XHR页面加载时设置了。
  • 名为YII_CSRF_TOKEN的表单数据值。

0

0

如果您正在本地主机上工作,您可能需要设置虚拟主机才能执行 cookie 认证,如此线程所述:this thread

IE 和 Chrome 不接受来自本地主机的 cookie,这可能是原因之一。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接