- 2009-08-27 (Thu) 22:04
- Ruby
Ruby on RailsでSSLで通信する必要があるページには、DHH謹製らしい?ssl_requirement pluginを使用すると、以下のようにに簡単にhttpsにリダイレクトしてくれるようにできます。
class Hoge < ApplicationController
ssl_required(:index) # インデックスページだけSSLで通信する。
def index
# some crazy codes ...
end
def show
# some rotten codes ...
end
end
残念ながら、このssl_requiredはアクションに:allとか書いてコントローラ全部を対象にするというようなことができません。
allというアクションを定義する場合もあるからこうなっているのかもしれません。
コントローラ全体にSSL通信をさせるようにするための方法については、コントローラ全体をssl強制に – 車輪の再発明というサイトに、trueを返すssl_required?メソッドを定義する方法が書かれています。
現在書いているRailsアプリでも同様のことが行われているものの、いかんせんたびたび見る気がしてきて、クラスメソッドにしようかと思いました。
でも、すでにssl_requiredというメソッドがあるところに、さらなる同じようなメソッドを作るのは避けたいし、やっぱりssl_required(:all)と書きたいと思いました。
そこでalias_method_chainを使用して、ApplicationControllerをこんな風にしてみました。
class ApplicationController < ActionController::Base
include SslRequirement
# some codes...
class << self
def ssl_required_with_all(*actions)
if actions.include?(:all)
class_eval do
def ssl_required?
true
end
end
else
class_eval do
ssl_required_without_all(*actions)
end
end
end
alias_method_chain(:ssl_required, :all)
end
end
まともにclass_evalとかがわかっていないので、かなり怪しいです!!!
- Newer: Snow Leopardをインストールしました。
- Older: FriendFeed、始めました。
