#ruby-on-rails #validation #passwords #authlogic #omniauth
#ruby-on-rails #проверка #пароли #authlogic #omniauth
Вопрос:
Я пытаюсь разрешить пользователям регистрироваться в моем приложении с помощью внешних сервисов, таких как 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 символа)
Есть идеи?
Ответ №1:
То, что вы ищете, — это способ просто игнорировать проверку пароля. Этот процесс называется постепенным подключением и чаще всего используется для создания учетной записи пользователя, но не требует определенных действий, пока они действительно не понадобятся пользователю для более сложных системных операций. Что вы хотите сделать, так это изменить конфигурацию 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 /
Ответ №2:
Если вы не введете поле crypted_password в пользовательскую модель, вы не получите загруженный модуль пароля, и поэтому проверки не будут выполняться.
Вы обнаружите, что это обычное поведение каждого из модулей в Authlogic.