我有一个使用骨干的rails应用程序,但是当我调用save时,服务器正在重定向到登录 - 即使我已经登录(找到骨干模型的页面仅在登录后显示)。
我使用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请求之前,有一个AJAX请求使用jQuery 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保存的页面(非主干),并且工作正常(还需要已登录的用户)。
答案 0 :(得分:2)
我对Backbone没有多少经验,但听起来好像没有发送CSRF token。
这篇文章应该会有所帮助: http://ngauthier.com/2011/02/backbone-and-rails-forgery-protection.html