IPアドレスでアクセスで制限を行う【Rails】


目的

自分のポートフォリオサイトを作る時に、
作品投稿画面に遷移できるIPアドレスを制限したかった為実装しました。

・開発している環境下でのみのIPアドレスを許可したい。
・指定したIPアドレス以外はリダイレクトでroot_pathに戻したい。

request.ip を使ったメソッドをコントローラーに記述

コントローラーの private メソッド以下に以下の記述をおこないます。

sample_controller.rb
 private

  def client_ip
    request.ip
  end

以上の記述だけで、クライアントのIPアドレスを取得できます。

試しに、indexアクションでインスタンス変数に入れてみます。

sample_controller.rb
def index
  @ip = client_ip
end

viewに読み込んでみます。

index.html.erb
 <%= @ip %>

すると、

::1と出力されました。
ローカルだと ::1 という値が取得されるようです。
heroku などにデプロイすると、クライアントのIPアドレスを取得できます。

if文 を使ったメソッドをコントローラーのprivateに定義

sample_controller.rb
 private

  def client_ip
    request.ip
  end

  def judge_ip
    if client_ip == "::1"
    elsif client_ip == "123.456.789.10"
    else
      redirect_to root_path
    end
  end

このように記述すれば、開発環境と、指定したIPアドレスでのアクセスのみ true となり、
それ以外は、ルートパスにリダイレクトされる筈です。
この処理をアクションに定義してみます。

sample_controller.rb
def new
  judge_ip
end

ローカル環境では、
if client_ip == "::1" を  "::2"
などに変えて試してみてください。
するとリダイレクトされる筈です。

Wi-Fi環境の場合は、PCでもスマホでも同じIPアドレスとなるので、
スマホのWi-Fiを切ってからアクセスすると、制限がかかっていることが確認できます。

念の為、自分のIPアドレスは環境シェルに格納しました。

セキュリティの知識が少ない為、別の方法の方が良いなどのアドバイスがあれば、
ご教授いただけると助かります。