我有一个Rails 5应用程序,它使用默认会话存储来通过Devise进行用户身份验证,以及一个自定义会话控制器,用于处理未经身份验证的用户对其他资源的访问。
问题在于,虽然会话正常运行,但应用程序将创建两个cookie,而不管控制器是否需要它,并在30分钟后结束设计会话。我正在寻找有关如何添加自定义会话并在Rails中正确配置它的一些指导。
我的会话存储配置错误:
#/config/initializers/session_store.rb
Rails.application.config.session_store :cookie_store, key: '_application_session'
Rails.application.config.session_store :cookie_store, key: 'custom_session', expire_after: 30.minutes
这是否需要在中间件中解决?
答案 0 :(得分:1)
经过一些额外的试验和错误后,我将会话到期逻辑移到控制器中,而不是每个Alexis'以及session_store.rb配置。建议,现在两个会议都按预期工作。
我使用的控制器方法或多或少类似于以下内容:
#/app/controllers/custom_session_controller.rb
before_action :check_session_expiry
def check_session_expiry
if session[:custom_session_key] && session[:created_at] < 30.minutes.ago
reset_session
redirect_to new_custom_session_path, alert: "session expired"
end
end
#/config/initializers/session_store.rb
Rails.application.config.session_store :cookie_store, key: '_application_session'
Rails.application.config.session_store :cookie_store, key: 'custom_session'
我发现this other similar question有助于达成解决方案。