【问题标题】:Posting to Yii PHP framework using Backbone.js使用 Backbone.js 发布到 Yii PHP 框架
【发布时间】:2012-06-12 15:59:27
【问题描述】:

我正在尝试使用 Backbone.js 模型保存到我的 Yii Web 应用程序,但即使模型是序列化表单并且我使用 Backbone.sync 设置,我也会收到“无法验证 CSRF 令牌”响应一个标题。

模型(表单中包含 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 );

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 请求是否可以正常工作?

标签: post backbone.js yii xmlhttprequest csrf


【解决方案1】:

如果您在 localhost 上工作,您可能需要设置一个虚拟主机才能执行 cookie 身份验证,如该线程所述:this thread

IE 和 Chrome 不接受来自 localhost 的 cookie,这可能是原因

【讨论】:

    【解决方案2】:

    如果您使用 save() 发送数据,则必须在参数中发送 cookie 和会话 ID。在此处查看此博客文章的缓存版本(因为它现在离线):http://webcache.googleusercontent.com/search?q=cache:tML1kmL08ikJ:blog.opperator.com/post/15671431847/backbone-js-sessions-and-authentication+&cd=1&hl=en&ct=clnk

    【讨论】:

      【解决方案3】:

      YII_CSRF_TOKEN 不是标题,它只是一个表单值。 根据this 行,我们的请求必须包含

      • 一个 CSRF cookie,它已经由第一个非 XHR 页面加载设置
      • 名为YII_CSRF_TOKEN的表单数据值

      【讨论】:

        猜你喜欢
        • 2013-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-04
        • 2016-01-27
        • 1970-01-01
        相关资源
        最近更新 更多