我正在使用 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 已插入数据,并且来自设计的会话数据正在工作,但我似乎无法清除它。
我的印象是 devise 在登录时会自动执行此操作,但如果是这样,那么同样的问题正在发生并且 rails 没有清除它。
有什么建议么?