我正在使用Authlogic来管理我的用户会话。我正在使用LDAP加载项,因此我的用户模型中包含以下内容
acts_as_authentic do |c|
c.validate_password_field = false
end
问题是,最近我发现应用程序中会有一些用户不属于LDAP(并且无法添加!)。因此,我需要针对数据库验证一些密码,而针对LDAP验证其他密码。
将根据数据库验证密码的用户将具有一个特定属性,该属性将告诉我该密码将在我的数据库中验证。
我该如何管理? validate_password_field是否可能收到“变量”?这样我可以创建一些返回true / false的方法,具体取决于密码验证的位置?
谢谢!
NicolásHockIsaza
答案 0 :(得分: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个辅助方法来向validates方法的末尾添加选项,因此您可以使用它来在使用LDAP时关闭验证。
答案 1 :(得分: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