在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,所以我想我确实失去了会话。
答案 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;