20

SSL で実行する必要がある Rails アプリケーションがあります。ssl_requirement を試しましたが、すべてのコントローラーにすべてのアクションを入力する必要があるようです。

ユーザー要求が http にあるときにアプリが自動的に https にリダイレクトされるように、ssl_requirement を使用してアプリケーション コントローラーに before_filter を追加できる方法はありますか?

皆さんありがとう。:)

4

3 に答える 3

32

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"
于 2010-10-05T10:13:40.910 に答える
5

リクエストが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
于 2010-10-05T08:05:28.270 に答える
1

主な問題は、force_ssl.rb がロードされていないことと、Rails 3.1 ではデフォルトで lib がロードされていないことです。追加する必要があります

config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]

application.rb

于 2011-12-06T20:25:54.707 に答える