ユーザーエージェントでアクセスを制限
application.rb に追加。
def refuse_ua(condition=nil, &block) ret = if block block.call request.user_agent else case condition when String refuse_ua /#{condition}/ when Regexp !condition.match(request.user_agent) when Array condition.inject true do |ret, cond| ret && refuse_ua(cond) end else raise ArgumentError end end unless ret erase_redirect_results redirect_to :back rescue redirect_to :controller => 'top' end ret end def self.refuse_ua(*args, &block) if block self.append_before_filter *args do |controller| controller.__send__ :refuse_ua, nil, &block end else condition = args.shift self.append_before_filter *args do |controller| controller.__send__ :refuse_ua, condition end end end
使い方
refuse_ua 'MSIE' # IEにアクセスさせない refuse_ua ['MSIE', 'Firefix'] # IEとFirefoxにアクセスさせない refuse_ua {|ua| なんか特殊な条件 }
ちゃんと動いてる気がする。
テストでユーザーエージェントを指定する
こんだけ
@request.user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4'