2011-10-03 9 views

cevap

10

Vitaly'nin yaklaşımı iyi bir çözüm gibi görünüyor, ama vardır Kimlik bilgileri yanlış olsa bile, giriş yapmayı deneyen herkese yönetici erişimi veren ciddi bir hata.

:

İlk, (kimlik doğrulaması gerektiren işlemlerde) bir çift fonksiyonel testler (o upvoted alır ve insanların körü körüne güvenlik kusur ile "doğru" cevabı kabul etmiyoruz umuduyla cevap olarak bu Gönderme)

test "admin is set with correct credentials" do 
    @request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials("user", "pass") 
    get :index 
    assert_response 200 
    assert_equal true, session[:admin] 
end 

test "admin isn't set with incorrect credentials" do 
    @request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials("user", "incorrect") 
    get :index 
    assert_response 401 
    assert_not_equal true, session[:admin] 
end 

Bunu Vitaly koduyla çalıştırırsanız, ikinci sınama başarısız olur, çünkü parola hatalı olsa bile session[:admin] doğru olarak ayarlanmıştır.

Burada düzgün session[:admin] ayarlar ve hem testler geçmesi yapmak benim kod: Bu güzel görünüyor

private 
def authenticate 
    authenticate_or_request_with_http_basic do |user_name, password| 
    session[:admin] = (user_name == "name" && password == "pass") 
    end 
end 
+0

Teşekkürler, haklısınız. Bu hatayı nasıl yaptığımı gördüm. Umarım pek fazla insan bunu etkilemez. Doğru cevabı değiştirmek için çok geç kaldığım için üzgünüm. Bildirimi fark etmedim. – Vitaly

0

Sen temel kimlik doğrulama ile CanCan işi yapabilir, bu kılavuzu https://github.com/ryanb/cancan/wiki/changing-defaults okumak, sonra sadece giriş yapmış kullanıcı adı dayalı izinler ayarlayabilirsiniz olarak genellikle Cancan kullanın.

+0

ama olmayan gerekli karmaşık hale getiriyor. Kullanıcının oturum açıp açmadığını kontrol etmek için oturum kullanmanın kullanılabilirliğini düşünüyorum. Herhangi bir fikir? – Vitaly

İlgili konular