我在Torquebox上使用JRuby构建了一个rails 4应用程序,并遇到了一个奇怪的会话问题。我正在使用设计gem处理身份验证,但是根据rails安全指南,我正在尝试在用户成功登录时重置会话。
我创建了一个Warden钩子,它为我处理这个,看起来像这样
Warden::Manager.after_set_user :event => [:set_user, :authentication] do |record, warden, options|
if options[:scope] && warden.authenticated?(options[:scope])
request = warden.request
Rails.logger.debug "session - #{request.session}"
# backup = request.session.to_hash
# backup.delete(:session_id)
request.reset_session
# request.session.update(backup)
Rails.logger.debug "session - #{request.session}"
end
end
这个方法肯定被调用,这很好,但是两个输出都是相同的,并且会话根本没有被重置。我正在使用TorqueBox会话存储,设置如
# session_store.rb
RtsBackend::Application.config.session_store :torquebox_store, {
key: '_RtsBackend_session'
}
# config.ru
use TorqueBox::Session::ServletStore
它似乎正在工作,因为TorqueBox已插入数据,而来自设计的会话数据正在运行,但我似乎无法清除它。
我的印象是设计在登录时会自动执行此操作,但如果是,则会发生同样的问题,并且rails不会清除它。
有什么建议吗?
答案 0 :(得分:0)
因此,经过深入研究,并与其中一个核心TorqueBox开发人员交谈,结果证明这是一个错误。在rails 4中,他们改变了重置会话的方式,但不涉及清除其内容。
感谢@bbrowning
和this commit,现在应该在推送修复后对其进行排序,等待最终测试:)