1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-07-21

目的

自分のポートフォリオサイトを作る時に、
作品投稿画面に遷移できる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 %>

すると、

ed300e8acc07a4d358b34eadb52b81e9.png

::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アドレスは環境シェルに格納しました。

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

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?