目的
自分のポートフォリオサイトを作る時に、
作品投稿画面に遷移できるIPアドレスを制限したかった為実装しました。
・開発している環境下でのみのIPアドレスを許可したい。
・指定したIPアドレス以外はリダイレクトでroot_pathに戻したい。
request.ip を使ったメソッドをコントローラーに記述
コントローラーの private メソッド以下に以下の記述をおこないます。
private
def client_ip
request.ip
end
以上の記述だけで、クライアントのIPアドレスを取得できます。
試しに、indexアクションでインスタンス変数に入れてみます。
def index
@ip = client_ip
end
viewに読み込んでみます。
<%= @ip %>
すると、
::1と出力されました。
ローカルだと ::1 という値が取得されるようです。
heroku などにデプロイすると、クライアントのIPアドレスを取得できます。
if文 を使ったメソッドをコントローラーのprivateに定義
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 となり、
それ以外は、ルートパスにリダイレクトされる筈です。
この処理をアクションに定義してみます。
def new
judge_ip
end
ローカル環境では、
if client_ip == "::1" を "::2"
などに変えて試してみてください。
するとリダイレクトされる筈です。
Wi-Fi環境の場合は、PCでもスマホでも同じIPアドレスとなるので、
スマホのWi-Fiを切ってからアクセスすると、制限がかかっていることが確認できます。
念の為、自分のIPアドレスは環境シェルに格納しました。
セキュリティの知識が少ない為、別の方法の方が良いなどのアドバイスがあれば、
ご教授いただけると助かります。