関連するコントローラーで次のようなことを行って、force_ssl メソッドで SSL を使用しているアプリケーションのセクションがあります。
class MyController < ApplicationController
force_ssl
end
これは問題なく動作しますが、このセクションに含まれていないページでは SSL を使用したくありません。不要な場合に非 SSL プロトコルにリダイレクトすることは可能ですか?
関連するコントローラーで次のようなことを行って、force_ssl メソッドで SSL を使用しているアプリケーションのセクションがあります。
class MyController < ApplicationController
force_ssl
end
これは問題なく動作しますが、このセクションに含まれていないページでは SSL を使用したくありません。不要な場合に非 SSL プロトコルにリダイレクトすることは可能ですか?
HTTP レベルで SSL リダイレクトを行わないのはなぜですか? HTTP レベルで行うと、よりクリーンで高速になります (リクエストが Rails の前にリダイレクトされるため)。
force_ssl
ソース コード ( http://apidock.com/rails/ActionController/ForceSSL/ClassMethods/force_ssl )を見る と、単純なリダイレクトが行われます。
の :protocol オプションを使用したくない場合もありますlink_to
。
これには自動魔法の機能があるとは思いません。そのため、SSL が必要な場所とそうでない場所を定義する必要があります。そのマッピングを作成すると、ApplicationController で単純な条件を作成するのは簡単です。
このように、構文を気にしない場合
https_only = { auth:{'login','logout',...}, registration:{'new','edit',...},...}
https_only.each do |controller, actions|
if controller_name == controller
actions.each do |a|
if action_name == a
do_redirect_to_https_with_current_path
else
do_nothing
end
end
end