2011-05-18 16 views
10

aracılığıyla izin vermeliyim Minimal olarak güvenli olmasını sağlamak istediğim bir blog oluşturdum (örneğin, bilmiyorum, rastgele insanları dışarıda tutmak istiyorum). NSA benzeri güvenlik önlemlerini uygulamaya çalışmamak). Siteyi "güvenli" yapmak için Rack :: Auth :: Basic ile toto kullanıyorum. index.xml aracılığıyla blog okuyucularının şifre ile uğraşmadan feed'i okuyabilmelerini sağlamak istiyorum (ve evet, bunun benim "güvenlik" lerde büyük bir delik olduğunu biliyorum).Bazı URL'lere seçici olarak Rack :: Auth :: Basic

Bu bir URL'yi Rack :: Auth :: Basic ile nasıl yapabilirim?

Bu siteme temel kimlik doğrulama eklendi nasıl:

use Rack::Auth::Basic, "blog" do |username, password| 
    [username, password] == ['generic', 'stupidanddumbpassword'] 
end 
+0

Eğer sırt kullanılması :: URLMap düşündünüz mü: Mevcut çözüm muhtemelen bir uygulama erişilebilir olmasını daha sonra bir yolunu gerektirir eğer bir kod çoğaltma neden olur çünkü , Ben kodu değişti? [Bu] (http://blog.ninjahideout.com/posts/rack-urlmap-and-kicking-ass), kullanımı hakkında oldukça iyi bir blog gönderisidir. Senin için çalışacağından emin değilim. Eğer sadece belirli insanların bir şey görmesini istiyorsanız o zaman ya daha fazla güvenlik ya da sadece düz ol 'e-posta önerim olurdu (sadece bir öneri, akıl :) – iain

cevap

14

Nasıl bazı iyi ol hakkında' moda miras? :: Kimlik Doğrulama :: Temel basit bir raf uygulaması (kaynak: https://github.com/rack/rack/blob/master/lib/rack/auth/basic.rb) Raf o #call yöntemini geçersiz kılmak mümkün yüzden ve doğrulamasını atlamak eğer istek yoluna uyup '/index.xml':

class BlogAuth < Rack::Auth::Basic 

    def call(env) 
    request = Rack::Request.new(env) 
    case request.path 
    when '/index.xml' 
     @app.call(env) # skip auth 
    else 
     super   # perform auth 
    end 
    end 

end 

use BlogAuth, "blog" do |username, password| 
    [username, password] == ['generic', 'stupidanddumbpassword'] 
end 

için rafta daha fazla arkaplan, kontrol edin: http://rack.rubyforge.org/doc/SPEC.html

Iain'in Rack :: URLMap hakkındaki önerisini denemedim, ancak iyi bir seçenek de olabilir gibi görünüyor.

3

Cevabınız için teşekkürler!

Bu çözümü da kullandım, ancak küçük bir değişiklik yaptım.

class AppBasicAuth < Rack::Auth::Basic 
    def call(env) 
    request = Rack::Request.new(env) 
    allowed_paths = ['/api/v2/get_new.json'] 

    if allowed_paths.include? request.path 
     @app.call(env) # skip auth 
    else 
     super   # perform auth 
    end 
end 
end