2010-03-17 2 views
1

Как я могу избавиться от сообщений проверки, рассказывающих мне, что:OpenID и Authlogic - логин и пароль?

Login is too short (minimum is 3 characters) 
Login should use only letters, numbers, spaces, and [email protected] please. 
Password is too short (minimum is 4 characters) 
Password confirmation is too short (minimum is 4 characters) 

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

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

ответ

0

Один из вариантов заключается только в подтверждении наличия 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 
Смежные вопросы