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

私はdeviseを使用しており、私のrails3サーバーはHAProxyの背後で実行されています。HAProxy は HTTPS トラフィックを終了し、HTTP リクエストを Rails に渡します。私の問題は、session_store.rb で :secure => true をオンにすると、ユーザーが「Unauthorized」というメッセージとともにサインイン ページにリダイレクトされることです。私はそれをたくさんデバッグしようとしましたが、それを機能させる方法がわかりません。

HAProxy がすべての安全なトラフィックを終了させ、非安全なトラフィックをレールに渡すリバース プロキシである状況です。RailsがCookieをセキュアに設定すると、どういうわけかそれ自体がアクセスできなくなります。

4

2 に答える 2

7

通常のセッション Cookie の場合、これを正しく行っています。'_secure_session' cookie がブラウザで安全に正しく設定されているはずです。Devise の「remember me」Cookie については、devise 構成で設定する必要があります。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 コードのどこかに問題があります。

于 2013-03-07T02:17:22.423 に答える