Authlogic多密码验证

时间:2010-03-22 06:00:55

标签: ruby-on-rails ruby-on-rails-plugins authlogic

我正在使用Authlogic来管理我的用户会话。我正在使用LDAP加载项,因此我的用户模型中包含以下内容

  acts_as_authentic do |c|
     c.validate_password_field = false
  end

问题是,最近我发现应用程序中会有一些用户不属于LDAP(并且无法添加!)。因此,我需要针对数据库验证一些密码,而针对LDAP验证其他密码。

将根据数据库验证密码的用户将具有一个特定属性,该属性将告诉我该密码将在我的数据库中验证。

我该如何管理? validate_password_field是否可能收到“变量”?这样我可以创建一些返回true / false的方法,具体取决于密码验证的位置?

谢谢!

NicolásHockIsaza

2 个答案:

答案 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