OpenID и Authlogic - логин и пароль? - PullRequest
1 голос
/ 17 марта 2010

Как мне избавиться от проверочных сообщений, сообщающих, что:

Login is too short (minimum is 3 characters)
Login should use only letters, numbers, spaces, and .-_@ please.
Password is too short (minimum is 4 characters)
Password confirmation is too short (minimum is 4 characters)

это происходит еще до вызова map_openid_registration, что не дает мне никакого шанса заполнить логин чем-то из возвращенной регистрации Hash Я хотел бы иметь автоматическую регистрацию OpenID (при входе в систему), не требуя от пользователя ввода логина / пароля.

Я также не буду делать эти поля "не обязательными" или "не проверенными", поскольку они все еще нужны при регистрации логина / пароля старой школы Спасибо

1 Ответ

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

Один из вариантов будет проверять наличие login и password, если identity_url пусто. Authlogic предоставляет для этого хук:

openid_validation_options = { :unless => :has_openid? }
Authlogic::ActsAsAuthentic.class_eval do
  Login::Config.validates_length_of_login_field_options.merge       openid_validation_options
  Login::Config.validates_format_of_login_field_options.merge       openid_validation_options
  Password::Config.validates_length_of_password_field_options.merge openid_validation_options
  Password::Config.validates_format_of_password_field_options.merge openid_validation_options
end

class MyUserClass
  acts_as_authentic

  protected
  def has_openid?
    identity_url.present?
  end
end

В качестве альтернативы, вы можете установить значения по умолчанию login и password перед сохранением, если присутствует identity_url:

class MyUserClass
  acts_as_authentic
  before_create :set_login_and_password_if_openid

  protected
  def set_login_and_password_if_openid
    if new_record? && identity_url.present?
      self.login ||= identity_url
      if password.blank? && password_confirmation.blank?
        self.password = self.password_confirmation = generate_random_password
      end
    end
  end

  def generate_random_password
    ...
  end
end
...