SSL で実行する必要がある Rails アプリケーションがあります。ssl_requirement を試しましたが、すべてのコントローラーにすべてのアクションを入力する必要があるようです。
ユーザー要求が http にあるときにアプリが自動的に https にリダイレクトされるように、ssl_requirement を使用してアプリケーション コントローラーに before_filter を追加できる方法はありますか?
皆さんありがとう。:)
SSL で実行する必要がある Rails アプリケーションがあります。ssl_requirement を試しましたが、すべてのコントローラーにすべてのアクションを入力する必要があるようです。
ユーザー要求が http にあるときにアプリが自動的に https にリダイレクトされるように、ssl_requirement を使用してアプリケーション コントローラーに before_filter を追加できる方法はありますか?
皆さんありがとう。:)
Rack ミドルウェアを使用します。
# lib/force_ssl.rb
class ForceSSL
def initialize(app)
@app = app
end
def call(env)
if env['HTTPS'] == 'on' || env['HTTP_X_FORWARDED_PROTO'] == 'https'
@app.call(env)
else
req = Rack::Request.new(env)
[301, { "Location" => req.url.gsub(/^http:/, "https:") }, []]
end
end
end
# config/environment.rb
config.middleware.use "ForceSSL"
リクエストがsslにあるか、アプリケーションのbefore_filterにないかをテストできます
class Application < AC::Base
before_filter :need_ssl
def need_ssl
redirect_to "https://#{request.host}/#{request.query_string}" unless request.ssl?
end
end
主な問題は、force_ssl.rb がロードされていないことと、Rails 3.1 ではデフォルトで lib がロードされていないことです。追加する必要があります
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
にapplication.rb