我正在阅读使用rails 4的敏捷Web开发的书
在用户模型中我有一个不能少于6个字符的密码验证
validates :password_digest, length: {minimum: 6}
但实际上,当我创建一个新用户时,它允许我用少于6个来完成。任何建议?
由于
答案 0 :(得分:3)
简短 - 你正在验证错误的字段。替换:password_digest:密码。
validates :password, length: { minimum: 6 }
这里有点长的解释: 我打开了一本书并查看了第14章(名为“任务I:登录”)。 看起来您的用户表中包含列'name','password_digest'和'salt'。 本书中的示例描述了如何散列密码,将其与salt混合并将结果存储在数据库中。重点是 - 即使您从一个字母生成此密码,您的'password_digest'也会足够长。您可以自己在irb中尝试:
require 'digest'
Digest::SHA2.hexdigest('a') #=> "ca978112ca1bbdcafac231b39a2..."
因此,您不应该验证散列密码的长度。相反,您应该验证'密码'属性本身。
答案 1 :(得分:2)
<强>加密强>
您正在验证password_digest
- 这表明它是加密密码?
正如评论中所提到的,除非您的表单输入将被称为 对此的即时修复(虽然我不确定它是否完全正确)是验证“裸”密码。这将验证密码为已插入,而不是散列版本:password_digest
,否则在执行验证之前可能会对进行哈希,使此值始终超过6个字符< / p>
#app/models/user.rb
Class User < ActiveRecord::Base
validates :password, length: {minimum: 6}
end