【问题标题】:Configure multiple named sessions in Rails application在 Rails 应用程序中配置多个命名会话
【发布时间】:2017-09-26 23:36:49
【问题描述】:

我有一个 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

这是需要在中间件中解决的问题吗?

【问题讨论】:

  • 我相信该设计已存储在 custom_session 上,您应该在控制器级别处理该设计,尝试对其进行测试,删除您的 cookie 和会话并检查它们是否都在第一次加载
  • 谢谢你是正确的,自定义会话在创建时会覆盖应用会话。

标签: ruby-on-rails ruby session


【解决方案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 有助于找到解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2011-03-24
    相关资源
    最近更新 更多