最少 6 个字符的密码不起作用 [Rails 4]



我正在阅读带有Rails 4

的敏捷Web开发书

在用户模型中,我有一个密码验证,不能少于6个字符

validates :password_digest, length: {minimum: 6}

但实际上,当我创建新用户时,它可以让我少于6。任何建议?

谢谢

要短 - 您正在验证错误的字段。替换:password_digest with:password。

validates :password, length: { minimum: 6 }

这里的解释更长一点:我已经打开一本书并查看第14章(命名为"任务I:登录")。看来您的用户表具有"名称"," password_digest"one_answers" salt"的列。本书中的样本描述了如何哈希密码,将其与盐混合并在数据库中产生储存结果。关键是 - 即使您从一个字母中生成它,您的'password_digest'也会足够长。您可以在IRB中自己尝试:

require 'digest'
Digest::SHA2.hexdigest('a') #=> "ca978112ca1bbdcafac231b39a2..."

因此,您不应该验证哈希密码的长度。相反,您应该验证"密码"属性。

加密

您正在验证password_digest-这表明它是加密密码?

如评论中所述,除非您的表格输入称为 password_digest,否则可能会在执行验证之前被哈希 hash hash ,使该值始终超过6个字符

对此的即时修复(尽管我不确定它是否完全正确)是验证"裸"密码。这将验证密码为预先验证,而不是哈希版本:

#app/models/user.rb
Class User < ActiveRecord::Base
     validates :password, length: {minimum: 6}
end

最新更新