在Rails ApplicationController会话中使用rescue_from的AJAX调用似乎丢失了

时间:2011-09-11 16:15:11

标签: ruby-on-rails error-handling

在Rails中,我在ApplicationController中添加了几个rescue_from处理程序。它们工作正常,除了会话丢失因为下一个请求总是被重定向到登录页面。

的ApplicationController:

  rescue_from ActiveRecord::RecordNotFound, :with => :handle_record_not_found
  rescue_from ActiveRecord::RecordInvalid, :with => :handle_record_invalid
  rescue_from ApplicationSecurityError, :with => :handle_security_error
  rescue_from ApplicationError, :with => :handle_application_error

其中一位处理程序:

def handle_application_error(error)
  logger.warn "#{error.class} #{error.user_safe_message} #{error.debug_info}, user #{@current_user.id}"
  render :json => {:errors => {:base => error.user_safe_message}, :status => :ok}
end

有没有办法在不丢失会话的情况下使用这些处理程序? 我检查了Firebug,它肯定是服务器端,因为jQuery从错误的请求获得了一个不同于以前的错误请求的cookie,所以我想我确实失去了会话。

1 个答案:

答案 0 :(得分:0)

好的,所以我再次尝试SO搜索并找到了 Rails 3 user session gets destroyed while calling create from backbone collection

指向protect_from_forgery,它带我去了My jquery AJAX POST requests works without sending an Authenticity Token (Rails)

为了解决这个问题,我刚刚为我的所有AJAX请求添加了伪造保护参数。

var _auth_token_name = '<%= request_forgery_protection_token %>';
var _auth_token = '<%= form_authenticity_token %>';

请求正文构造(我用它来调用$.ajax)从这开始:

var data = {};
data[_auth_token_name] = _auth_token;