2013-03-11 86 views
0

我有一个用户注册页面。我想要用户密码从4到16个符号。我需要检查他们是否至少有一个大写字母和一个数字。比我做这个密码的MD5哈希,并将其放入数据库。
如何验证它?
验证的模型试验,如果密码是32symbols长度:验证密码的正确方法

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

但我怎么验证密码,使得它的哈希值,并设置相应的错误,这个验证之前我的要求相匹配?
我想查看以获取user.errors [:密码]包含像'必须至少有一个数字'。和“必须至少有一个大写字母”。

+1

理想情况下,你的模型,这将哈希它提供密码为你提供帮助,并免除散列自己的密码(或忘记的后果)的来电者。但我不确定你如何使用ActiveRecord来做到这一点。 – cHao 2013-03-11 19:12:04

回答

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 2013-03-11 19:24:20

+1

如果要分隔验证密码和保存散列的过程,可以创建一个'after_validation'方法。对我来说,模型的工作是对它自己的数据负责。我不认为与自己的数据直接相关的逻辑会成为模型的一部分。 – 2013-03-11 19:33:10

+0

啊,我明白了。现在肯定有效。谢谢! – konnigun 2013-03-11 19:38:37