2013-03-07 84 views
4

我有以下的配置,我session_store.rb安全会话cookie为Rails应用

Fuel::Application.config.session_store :cookie_store, 
    :key => "_secure_session", 
    :secure => !(Rails.env.development? || Rails.env.test?), 
    :domain => :all 

在application_controller.rb

def default_url_options 
    return { :only_path => false, :port => 443, :protocol => 'https' } 
end 

我使用的设计和我的Rails3中的服务器正在运行的背后HAProxy的。 HAProxy终止HTTPS流量并将HTTP请求传递给Rails。我的问题是,当我打开:secure => true在session_store.rb中,用户被重定向回登录页面,并显示消息“未授权”。我曾试着调试过很多,不知道如何让它工作。

其中HAProxy是反向代理终止所有安全流量并将非安全流量传递到导轨的情况。当rails将cookie设置为安全时,它本身无法访问它。

回答

1

如果在初始身份验证时没有将Set-cookie发送到浏览器,那么听起来就像是设计问题。

如果Set-cookie正在浏览器中,但未在下一个https://请求上发回,那么它可能与:secure =>设置不匹配。

如果cookie由浏览器发送,但不通过HAProxy传递,那么这是一个HAProxy配置问题。

如果cookie处于ruby环境中,并且由于策略而被忽略,那么这是Ruby代码中的一个问题 - 猜测是围绕安全/不安全的cookie匹配。

+0

感谢您的见解。我会查的! – 2013-03-07 02:35:09

+0

我看着设计和监督源代码。设计似乎只使用cookie来记忆模块,我不使用可记忆的模块。而守侯者似乎根本没有使用cookies。所以,看起来设计不会处理会话cookie,除非被告知要记住用户。 – 2013-03-07 02:46:35

7

对于您正常的会话cookie,您正确执行此操作。您应该在浏览器中正确设置“_secure_session”Cookie以确保安全。对于设计“记住我”cookie,您需要在设计配置中进行设置。在配置/初始化/ devise.rb你会在某个地方找到一个线条围绕,看起来像

# 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 = {} 

我改线133到:

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