4

我的 session_store.rb 中有以下配置

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。我的问题是当我在 session_store.rb 中打开 :secure => true 时,用户被重定向回登录页面,并显示消息“未授权”。我已经尝试了很多调试它,不知道如何让它工作。

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

4

2 回答 2

7

对于您的正常会话 cookie,您正确地执行了此操作。您应该会在浏览器中看到“_secure_session”cookie 被正确设置为安全。对于设计“记住我”cookie,您需要在设计配置中进行设置。在 config/initializers/devise.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?}
于 2014-01-15T20:25:16.727 回答
1

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

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

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

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

于 2013-03-07T02:17:22.423 回答