Movatterモバイル変換


[0]ホーム

URL:


rochefort's blog

この広告は、90日以上更新していないブログに表示しています。

deviseの認証機能にIPアドレス制限をかける

認証機能にIPアドレス制限かけたいだけなので、いかようにもできそうですが、オシャレに実装する方法はないかと調べてみると、以下の実装がありました。

routesのconstraints

ruby on rails 3 - How can I restrict access ActiveAdmin login page by ip? - Stack Overflow

classWhitelistConstraintdefinitialize@ips =Whitelist.retrieve_ipsenddefmatches?(request)@ips.include?(request.remote_ip)endend# config/routes.rbTwitterClone::Application.routes.drawdo  match'admin/' =>'admin#login',:constraints =>WhitelistConstraint.newend

実装は簡単で、matches?メソッドが実装されたclassを用意し、routesのconstraintsオプションに渡すだけです。

deviseでやるには

単純にこの方法でやってみましたが、devise_for 自体がこの方法に対応してなさそうでした。

blockを使う

constraintsはblockで使うことができます。
Rails のルーティング - Railsガイド

namespace:admindo  constraintssubdomain:'admin'do    resources:photosendend

最終的には

こうなりました。
constraintsにはクラス自体も渡せます。この場合は、クラスメソッドとしてmatches? を実装すれば良いです。

# lib/constraints/whitelist_constraint.rbmoduleConstraintsclassWhitelistConstraintWHITELIST_IPS = ["1.2.3.4","5.6.7.8"    ].freezedefself.matches?(request)Rails.env.development? ||WHITELIST_IPS.include?(request.remote_ip)endendend# config/routes.rb  constraintsConstraints::WhitelistConstraintdo    devise_for:user,:path =>'',:path_names => {:sign_in =>"login",:sign_out =>"logout" }end

感想

constraints使ったことあんまりなかったのですが、なかなか便利でした。

About
id:rochefortid:rochefort

Ruby・Rails・Mac・Web・Tech、時々日々のことについて書いています。

follow
Search
Top Entries
はてなブックマーク数
Categories
Comments

    引用をストックしました

    引用するにはまずログインしてください

    引用をストックできませんでした。再度お試しください

    限定公開記事のため引用できません。

    読者です読者をやめる読者になる読者になる

    [8]ページ先頭

    ©2009-2025 Movatter.jp