Ruby on rails 验证密码的正确方法

Ruby on rails 验证密码的正确方法,ruby-on-rails,validation,Ruby On Rails,Validation,我有一个用户注册页面。我希望用户密码为4到16个符号。我需要检查它们是否至少有一个大写字母和一个数字。然后我对该密码进行md5哈希并将其放入数据库。 如何验证它? 如果密码长度为32symbols,则在模型测试中进行验证: validates :password, :length => { :minimum => 32 , :message => 'Not an md5 password provided.' } 但在对密码进行哈希运算并为此验证

我有一个用户注册页面。我希望用户密码为4到16个符号。我需要检查它们是否至少有一个大写字母和一个数字。然后我对该密码进行md5哈希并将其放入数据库。
如何验证它?
如果密码长度为32symbols,则在模型测试中进行验证:

  validates :password, :length => { :minimum => 32 , 
            :message => 'Not an md5 password provided.' }
但在对密码进行哈希运算并为此验证设置适当的错误之前,如何验证密码是否符合我的要求?

我想查看以获取用户。包含“必须至少有一个数字”和“必须至少有一个大写字母”之类内容的错误[:密码]。

您可以创建自定义验证程序方法,在该方法中可以执行任何您想做的操作:

validate :password_validation

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

理想情况下,您应该向模型提供密码,这将为您散列密码,并使调用者不必散列自己的密码(或忘记散列密码的后果)。但我不确定你会如何使用ActiveRecord做到这一点。是的,当然,但在模型验证内部创建md5似乎不符合逻辑。逻辑转到控制器,验证转到模型。如果要分离验证密码和保存哈希的过程,可以在验证后创建
方法。对我来说,模型的工作就是负责自己的数据。我不认为与作为模型一部分的自身数据直接相关的逻辑存在问题。