2010-03-22 138 views
0

我使用Authlogic來管理我的用戶會話。我使用的是LDAP插件,所以我有我的用戶以下模型Authlogic多重密碼驗證

acts_as_authentic do |c| 
    c.validate_password_field = false 
    end 

的問題是,最近我發現會有不會成爲其中的一部分的應用程序中的一些用戶LDAP(並且不能被添加!)。所以我需要根據數據庫驗證一些密碼,並根據LDAP驗證其他密碼。

將根據數據庫對其密碼進行驗證的用戶將擁有一個特定的屬性,告訴我該密碼將在我的數據庫中進行驗證。

我該如何管理? validate_password_field是否有可能收到「變量」?這樣我可以創建一些方法,根據密碼驗證的完成位置返回true/false?

謝謝!

尼古拉斯福伊薩薩

回答

2

你應該能夠做到這一點:

acts_as_authentic do |u| 
    u.validate_password_field = true 
    authentic_options = {:unless => Proc.new{|c| c.ldap}} 
    u.merge_validates_confirmation_of_password_field_options(authentic_options) 
    u.merge_validates_length_of_password_confirmation_field_options(authentic_options) 
    u.merge_validates_length_of_password_field_options(authentic_options) 
    end 

如果你正在寫驗證自己(不使用authlogic)你會想要做這樣的驗證:

validates_presence_of:password,:unless => Proc.new {| u | u.ldap}

由於authlogic提供了3種幫助方法來添加選項的方法只會驗證結束後,您可以使用此使用LDAP時關閉驗證。

0

你應該能夠在您的驗證做一個unless

acts_as_authentic do |c| 
    c.validate_password_field = false if c.ldap 
end 

甚至(如模型字段是一個布爾值):

acts_as_authentic do |c| 
    c.validate_password_field = c.ldap 
end 
+0

這意味着「acts_as_authentic」配置模塊在啓動時不加載? – Hock 2010-03-22 14:57:21