この広告は、90日以上更新していないブログに表示しています。
認証機能にIPアドレス制限かけたいだけなので、いかようにもできそうですが、オシャレに実装する方法はないかと調べてみると、以下の実装がありました。
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_for 自体がこの方法に対応してなさそうでした。
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使ったことあんまりなかったのですが、なかなか便利でした。
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。