Ruby on rails 3 rails应用程序的安全会话cookie

Ruby on rails 3 rails应用程序的安全会话cookie,ruby-on-rails-3,https,devise,session-cookies,Ruby On Rails 3,Https,Devise,Session Cookies,我的会话_store.rb中有以下配置 Fuel::Application.config.session_store :cookie_store, :key => "_secure_session", :secure => !(Rails.env.development? || Rails.env.test?), :domain => :all 在应用程序中_controller.rb def default_url_options return { :onl

我的会话_store.rb中有以下配置

Fuel::Application.config.session_store :cookie_store,
  :key => "_secure_session",
  :secure => !(Rails.env.development? || Rails.env.test?),
  :domain => :all
在应用程序中_controller.rb

def default_url_options
  return { :only_path => false, :port => 443, :protocol => 'https' }
end
我正在使用Desive,我的rails3服务器正在HAProxy后面运行。HAProxy终止HTTPS通信并将HTTP请求传递给Rails。我的问题是,当我在session_store.rb中打开:secure=>true时,用户会被重定向回登录页面,并显示消息“Unauthorized”。我试过很多次调试,不知道如何让它工作


在这种情况下,HAProxy是反向代理,终止所有安全流量,并将非安全流量传递给rails。当rails将cookie设置为安全时,它本身无法访问它。

如果在初始身份验证时未将Set cookie发送到浏览器,则听起来像是设计问题

如果Set cookie将被发送到浏览器,但在下一个https://请求中没有被发送回,那么它可能与:secure=>设置不匹配

如果cookie是通过浏览器发送的,但没有通过HAProxy传递,那么这就是HAProxy配置问题


如果cookie在ruby环境中,并且由于策略而被忽略,那么它在ruby代码中的某个地方是一个问题——大概是关于安全/不安全cookie匹配的问题。

对于正常会话cookie,您可以正确地执行此操作。您应该可以在浏览器中将“\u secure\u session”cookie正确设置为安全。对于Desive“记住我”cookie,您需要在Desive配置中设置它。在config/initializers/designe.rb中,您会在第133行附近找到一行

# Options to be passed to the created cookie. For instance, you can set
# :secure => true in order to force SSL only cookies.
# config.cookie_options = {}
我改为:

config.rememberable_options = {:secure => Rails.env.production?}

谢谢你的见解。我会查的!我查看了Desive和warden的源代码。Desive似乎只对rememberable模块使用cookie,而我并没有使用rememberable。监狱长似乎根本不用饼干。因此,看起来Deave不会处理会话cookies,除非被告知记住用户。