Почему установка validate_password_field в false отключает все проверки подлинности? - PullRequest
0 голосов
/ 13 апреля 2011

Я пытаюсь разрешить пользователям регистрироваться в моем приложении с помощью внешних служб, таких как Twitter и т. Д. Следовательно, мне не нужен пароль для модели пользователя, которую 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 символа)

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 25 апреля 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/

0 голосов
/ 18 апреля 2011

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

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

...