0

我有一个使用主干的 Rails 应用程序,但是当我调用保存时,服务器正在重定向到登录 - 即使我已经登录(找到主干模型的页面仅在登录后显示)。

我正在将backbone.matroyshka 用于嵌套模型-但删除它并不能解决问题。

这是在视图中调用模型保存的代码:

    var view = this;

// save model
this.model.save(null, {
    success: function(model, response) {
        view.$('#saving').hide();
        view.notice('Saved!', 'success');
    },
    error: function(model, response) {
        view.$('#saving').hide();
        view.notice(response, 'error');
        console.log('save failed ' + response, view.model.get('url'));
    }
});

在 model.save 请求之前,有一个使用 jQuery AJAX 检索数据的 AJAX 请求:

        $.ajax({
        type: 'GET',
        url: serverUrl,
        data: { url: model.get('url') },
        dataType: "json", 
        context: this,
        success: function(data) {
            model.set(data);
        },

        error: function(xhr, status, error) {
            console.log('lookup share url failed ' + error, this.get('source'),         this.get('about'));
            this.trigger('load:fail');
            if (options.error) {
                options.error(this, error);
            }
        }
    });

model.save 收到从服务器找到的 302,将其重定向到登录页面。资源的控制器受保护

  before_filter :signed_in_user, only: [:create]

signed_in_user 是直接取自关于使用 omni_auth 的教程的会话助手

  def signed_in_user
unless signed_in?
  store_location
  redirect_to login_path, notice: "You must be logged in to find out what they do."
end

结尾

我有另一个使用 AJAX(不是骨干网)保存的页面,它工作正常(也需要登录用户)。

4

1 回答 1

2

我对 Backbone 没有太多经验,但听起来它没有发送CSRF token

这篇文章应该会有所帮助: http: //ngauthier.com/2011/02/backbone-and-rails-forgery-protection.html

于 2012-11-08T21:18:04.193 回答