2013-03-08 38 views
5

ActiveAdmin için temel kimlik doğrulamasını ayarlamak istiyorum, hangi dahili düzenleme çözümü benim durumum için geçerli değil. Bunun için benim app içine paketlenmiş önce ActiveAdmin Engine için middleware eklemek mümkün olmak istiyorum.ActiveAdmin: HTTP temel kimlik doğrulaması nasıl kurulur?

ActiveAdmin::Engine.configure do |config| 
    config.middleware.use Rack::Auth::Basic do |username, password| 
    username == 'admin' && password == 'root' 
    end 
end 

Ama aktif yönetici yolları hala korumasız olduğundan görünüşe bu, o iş yapmak değildir: Ne yapmak başardı oldu. Bunu nasıl etkili bir şekilde yapabilirim? Ve hayır, sitemin tamamını temel kimlik doğrulamayla korumak istemiyorum.

cevap

12

İşte size birkaç fikir var:

# app/controllers/application_controller.rb 

class ApplicationController < ActionController::Base 

    # ... 
    http_basic_authenticate_with :name => "frodo", :password => "thering", :if => :admin_controller? 

    def admin_controller? 
    self.class < ActiveAdmin::BaseController 
    end 

Veya yalnızca belirli kaynakları korumak istiyorsanız, kontrolör bloğu kullanabilirsiniz

# config/initializers/active_admin.rb 

# somewhere outside the setup block 

class ActiveAdmin::BaseController 
    http_basic_authenticate_with :name => "frodo", :password => "thering" 
end 

monkeypatching sürümü:

# app/admin/users.rb 

ActiveAdmin.register Users do 
    controller do 
    http_basic_authenticate_with :name => "frodo", :password => "thering" 
    end 

    # ... 
end 

Kontrol cihazını bu şekilde config/initializers/active_admin.rb içinde genişletebileceğimi umuyordum. Kurulum blok, ama bu benim için işe yaramadı: bir ActiveAdmin versiyonu şey olabilir olarak

# app/admin/users.rb 

ActiveAdmin.setup do |config| 
    config.controller do 
    http_basic_authenticate_with :name => "frodo", :password => "thering" 
    end 

    # ... 
end 

Sen, olsa deneyebilirsiniz (Ben bir yere belgelenmiş gördüğüm bu yemin edebilirim ...)

İyi şanslar, umarım bu yardımcı olur. activeadmin config before_filter bir blok alır:

GÜNCELLEME: Birkaç tane daha seçenekleri: bundan önce

Fark etmemiştim.

# config/initializers/active_admin.rb 

ActiveAdmin.setup do |config| 
    # ... 
    config.before_filter do 
    authenticate_or_request_with_http_basic("Whatever") do |name, password| 
     name == "frodo" && password == "thering" 
    end 
    end 
end 

Ve ... sadece bir fikir daha. Eğer application_controller şey eklemeden keskin değil gibi geliyor, ama bu sürüm yukarıdaki birinci gibi koşullu değil: sadece ActiveAdmin yönetici alanını korumak istiyorsanız

# app/controllers/application_controller.rb 

class ApplicationController < ActionController::Base 

    def authenticate_admin 
    authenticate_or_request_with_http_basic("Whatever") do |name, password| 
     name == "frodo" && password == "thering" 
    end 
    end 
end 



# config/initializers/active_admin.rb 

ActiveAdmin.setup do |config| 
    # ... 
    config.authentication_method = :authenticate_admin 
end 
+0

hey, mevcut tüm seçenekleri listelemek için teşekkürler! İlki bildiğim bir şeydi, ama her ne pahasına olursa olsun uygulamak istemiyordu (koşullu filtreleme berbattı, tüm açık eylemlerle de değerlendirildi). İkincisi, iyi bir adaydır. Üçüncü olan tam olarak benim kullanım durumum değil.Dördüncü adım ise, aktif yönetim ekibinin, tüm ray uygulamalarının bir kimlik doğrulama sistemine ihtiyaç duymadığı/ihtiyaç duymadığı her zaman uygulanacak (bu sözdizimiyle olmasa da). Sanırım ikinci önerinizle gideceğim ve bir değerlendirmem olur olmaz size rapor edeceğim. Yine Thx! – ChuckE

+0

@ChuckE: İkinci seçeneğin sizin için iyi çalıştığı anlaşılıyor. Sadece authentication_method ve before_filter 'e dayalı birkaç tane daha ekledim. Yönetici kullanıcıları için kimlik doğrulaması yapmak istediğiniz başka bir yer varsa sonuncusu iyi olabilir ... Hepsine tekrar baktıktan sonra, ilk düzenlemelerimi ("config.before_filter" kullanarak) kullanmayı düşünüyorum. en iyi. İyi şanslar! –

+0

Ayrıca fikriniz de var, varsayılan aktif yönetici başlatıcısı içinde kalan bir çözüm kazanan gibi görünüyor! – ChuckE

-1

, o zaman bu denemelisiniz:

bir çekicilik ;-)

var gibi çalışır

# app/admin/dashboard.rb 
controller do 
    http_basic_authenticate_with :name => "mega-admin", :password => "supersecret" 
end 

eğlenceli

+0

Zamanlama saldırısına tabi tutuldu. Lütfen http://codahale.com/a-lesson-in-timing-attacks/ – mbj

-1

sadece sizin için başka bir çözüm olacaktır:

Eğer PROTET istediğiniz her alanda

kimlik doğrulaması: Eğer

before_filter çağırabilir o

# app/controllers/application_controller.rb protected def authenticate authenticate_or_request_with_http_basic do |username, password| username == "admin" && password == "superpassword" end end # config/initializers/active_admin.rb config.before_filter :authenticate 

bu çözüm ist için büyük bir artı.

+0

adresine bakın. Asla, EVER kimlik bilgilerini # # ile doğrulayın, bu bir zamanlama saldırısına tabi tutulur. http://codahale.com/a-lesson-in-timing-attacks/ – mbj

İlgili konular