Аутлогическая проверка нескольких паролей - PullRequest
0 голосов
/ 22 марта 2010

Я использую Authlogic для управления своими пользовательскими сессиями. Я использую надстройку LDAP, поэтому в моей модели пользователей есть следующее

  acts_as_authentic do |c|
     c.validate_password_field = false
  end

Проблема в том, что недавно я обнаружил, что в приложении будут пользователи, которые не будут частью LDAP (и не могут быть добавлены!). Поэтому мне нужно будет проверить НЕКОТОРЫЕ пароли к базе данных, а другие к LDAP.

Пользователи, чей пароль будет проверен по базе данных, будут иметь определенный атрибут, который будет сообщать мне, что этот пароль будет проверен в моей базе данных.

Как мне это сделать? Возможно ли, что поле validate_password_field получает «переменную»? Таким образом, я мог бы создать какой-нибудь метод, который будет возвращать true / false в зависимости от того, где будет выполняться проверка пароля?

Спасибо!

Николас Хок Исаза

Ответы [ 2 ]

2 голосов
/ 17 октября 2010

Вы должны быть в состоянии сделать это:

  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: пароль,: never => Proc.new {| u | u.ldap}

Поскольку authlogic предоставляет 3 вспомогательных метода для добавления параметров в конец методов validates, вы можете использовать это для отключения проверок при использовании LDAP.

0 голосов
/ 22 марта 2010

Вы должны иметь возможность сделать 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
...