【问题标题】:Proper way to validate password验证密码的正确方法
【发布时间】:2013-03-11 19:08:25
【问题描述】:

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

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

但是,在对密码进行哈希处理并为此验证设置适当的错误之前,如何验证密码是否符合我的要求?
我想查看 user.errors[:password] 包含“必须至少有一位数字”之类的内容。和“必须至少有一个大写字母。”

【问题讨论】:

  • 理想情况下,您应该向模型提供密码,它会为您散列它并减轻调用者必须散列自己的密码(或忘记密码的后果)。但我不确定你如何使用 ActiveRecord 来做到这一点。

标签: ruby-on-rails validation


【解决方案1】:

您可以创建一个自定义验证器方法,您可以在其中做任何您想做的事情:

validate :password_validation

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

【讨论】:

  • 是的,当然,但是在模型验证中创建 md5 似乎不合逻辑。逻辑进入控制器,验证进入模型。
  • 如果你想分离验证密码和保存哈希的过程,你可以创建一个after_validation方法。对我来说,模型的工作就是对自己的数据负责。我不认为与自己的数据直接相关的逻辑成为模型的一部分存在问题。
猜你喜欢
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
  • 2015-02-19
  • 2013-09-18
  • 2015-04-03
  • 2023-02-23
  • 2014-10-18
相关资源
最近更新 更多