0

私は現在、一部のルートで 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
4

2 に答える 2

0

このブログが役に立つかどうかはわかりません: Always-On HTTPS With Rails Behind an ELB も、アプリケーションの一部で強制的に https を使用しようとしている場合に役立つ可能性があります。SSL 要件。SSL 要件に関するセクションの詳細は、特定のアクションが SSL でのみ実行できるように指定する宣言的な方法を追加します。SSL でコントローラー全体を指定する必要がある場合は、呼び出します。ssl_exceptions

before_filterまたは、次のようにしてa を試して書くこともできます

class ApplicationController < ActionController::Base
  before_filter do
    if request.ssl? || Rails.env.production? 
      redirect_to :protocol => 'http://', status => :moved_permanently
    end
   end 
 end 

お役に立てれば

于 2013-08-29T19:22:15.890 に答える