概要
RailsアプリでIPアドレスを元にアクセス制限をかける方法を紹介します。
方法
ステップ1(メソッドを定義)
制限をかけたいコントロール上のprivateメソッド
として以下の様なメソッドを定義します。
今回は例としてアプリ全体にアクセス制限をかける為にApplicationController
にメソッドを定義していきます。
controllers/application_controller.rb
class ApplicationController < ActionController::Base
private
# 配列内にアクセスを許可するIPアドレスを羅列する。
def whitelisted?(ip)
return true if [123.43.65.1, 123.43.65.77].include?(ip)
false
end
# whiltelisted?で許可したIPアドレス以外のアクセスがあれば制限をかける(この場合はgoogle.comに飛ばしている。)
def block_foreign_hosts
return false if whitelisted?(request.remote_ip)
redirect_to "https://www.google.com" unless request.remote_ip.start_with?("123.456.789")
end
end
ステップ2(before_filter)
次に before_filter
を使用して、実際に制限をかけます。
controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_filter :block_foreign_hosts
#### メソッド部省略
end
メソッドの中身に関しては改善が見込めそうですが、上記の流れでRailsアプリでIPアドレスを元にアクセス制限をかけることが可能です。