Почему для параметра validate_password_field значение false отключает все проверки подлинности?

Я пытаюсь разрешить пользователям регистрироваться в моем приложении с помощью внешних служб, таких как твиттер и т. Д. Следовательно, мне не нужен пароль для модели пользователя, которую Authlogic пытается проверить. В результате я отключаю проверку пароля вот так:

acts_as_authentic
before_validation :update_authlogic_config
#In the case that the user has signed up with an omniauth service.
attr_accessor :needs_no_password
def update_authlogic_config     
    validate_password_field = !needs_no_password
end

Все это работает достаточно хорошо, но, похоже, также отключает проверку адреса электронной почты / имени пользователя, которую я хочу сохранить.

В результате я обновил свой метод, чтобы убедиться, что поле электронной почты проверяется следующим образом:

def update_authlogic_config
   validate_password_field = !needs_no_password
   ignore_blank_passwords = needs_no_password
   validate_email_field = true
end

Используя это, он перетаскивает проверки пароля, давая мне следующие ошибки:

Пароль слишком короткий (минимум 4 символа)

Подтверждение пароля слишком короткое (минимум 4 символа)

Любые идеи?


person digitalWestie    schedule 13.04.2011    source источник


Ответы (2)


Если вы не поместите поле crypted_password в модель пользователя, вы не загрузите модуль пароля, и поэтому проверки не будут выполняться.

Вы обнаружите, что это обычное поведение каждого модуля в Authlogic.

person james2m    schedule 18.04.2011

То, что вы ищете, - это способ просто игнорировать проверку пароля. Это процесс, называемый постепенным вовлечением, который чаще всего используется для создания учетной записи пользователя, но не требует определенных вещей до тех пор, пока они действительно не понадобятся пользователю для более сложных операций с системами. Что вы хотите сделать, так это изменить конфигурацию authlogic в вашей модели следующим образом:

acts_as_authentic do |c|
  c.merge_validates_confirmation_of_password_field_options({:unless => :networked?})
  c.merge_validates_length_of_password_field_options({:unless => :networked?})
  c.merge_validates_length_of_password_confirmation_field_options({:unless => :networked?})
end

def networked?
  self.authentications.any? # or true/false boolean of some kind
end

Я получил эту информацию из следующего содержания: http://gist.github.com/436707/

person mindtonic    schedule 25.04.2011