2013-03-07 93 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?}