2013-03-11 3 views
0

У меня есть страница регистрации пользователя. Я хочу, чтобы пароль пользователя составлял от 4 до 16 символов. Мне нужно проверить, что у них есть хотя бы одна заглавная буква и 1 цифра. Чем я делаю md5 хэш этого пароля и помещаю его в базу данных.
Как это проверить?
Validation в модельных испытаниях, если пароль 32symbols длина:Правильный способ проверки пароля

validates :password, :length => { :minimum => 32 , 
      :message => 'Not an md5 password provided.' } 

Но как я проверить, что пароль соответствует моим требованиям, прежде чем сделать хэш его и установить соответствующие ошибки для этой проверки?
Я бы хотел, чтобы пользователь user.errors [: password] содержал что-то вроде «Должен иметь хотя бы одну цифру». и «Должен иметь хотя бы одну заглавную букву».

+1

В идеале, вы бы предоставить пароль к модели, которая бы хэширования его для вас и освободить звонящего, чтобы иметь хэш собственные пароли (или последствия забывания). Но я не уверен, как вы это сделаете с помощью ActiveRecord. – cHao

ответ

2

Вы можете создать метод валидатора, где вы можете делать все, что вы хотите:

validate :password_validation 

def password_validation 
    unless password.length > 32 && ... # other requirements 
    errors.add(:password, 'Not an md5 password provided.') 
    end 
end 
+0

Да, конечно, но логично не создавать md5 внутри проверки модели. Логика переходит к контроллеру, валидации идут на модель. – konnigun

+1

Вы можете создать метод 'after_validation', если хотите отделить процессы проверки пароля и сохранения хэша. Для меня задача модели - нести ответственность за собственные данные. Я не думаю, что проблема с логикой, непосредственно связанной с ее собственными данными, является частью модели. –

+0

А, я вижу. Сейчас это работает. Благодаря! – konnigun

Смежные вопросы