私は現在、一部のルートで http を強制する方法 (より高速で、セキュリティは必要ありません) と、より機密性の高いページでは https を強制する方法を見つけようとしています。これに対する答えを見ました: Rails 3 SSL Deprecationですが、うまくいかないようです。
ルート URL の周りにスコープを追加しました。
scope :constraints => { :protocol => 'http' } do
root :to => 'site#index'
end
No route matches [GET] "/"
しかし、localhost:3000 にアクセスしようとすると、エラーがスローされました。
一部の場所で http を強制し、他の場所で https を強制するクリーンな方法はありますか (force_ssl
コントローラーで使用できますが、ありforce_http
ますか?) ルートの周りのスコープはきれいに見えますが、うまくいきません。私はそれを間違っていますか?
このような方法はいかがでしょうか。
CONTROLLERS_THAT_REQUIRE_SSL = ['check_out']
def ensure_proper_protocol
unless Rails.env.development? || Rails.env.test?
if request.protocol["https"] && !CONTROLLERS_THAT_REQUIRE_SSL.include?(params[:controller])
redirect_to "http://" + request.host + request.path
end
end
end