我正在阅读用rails 4开发敏捷web的书。
在用户模型中,密码验证不能少于6个字符。
validates :password_digest, length: {minimum: 6}但是实际上,当我创建一个新的用户时,它允许我用不到6来做它。有什么建议吗?
谢谢
发布于 2014-01-23 12:46:39
短一点-你在验证错误的字段。将:password_digest替换为:password。
validates :password, length: { minimum: 6 }稍长一点的解释:我打开了一本书,看了第14章(名为“任务I:登录”)。看起来您的users表中有'name‘、'password_digest’和'salt‘列。书中的示例描述了如何散列密码,如何将其与salt混合,并将结果存储在数据库中。关键是-你的'password_digest‘将足够长,即使你产生这个字母。你可以在irb里自己试试:
require 'digest'
Digest::SHA2.hexdigest('a') #=> "ca978112ca1bbdcafac231b39a2..."因此,您不应该验证哈希密码的长度。相反,您应该验证“密码”属性本身。
发布于 2014-01-23 12:41:11
加密
你在验证password_digest -这表明是加密密码?
如注释中所述,除非表单输入将被称为password_digest,否则在执行验证之前可能会对其进行散列,使此值始终超过6个字符
解决这个问题的直接方法(虽然我不确定它是否完全正确)是验证“裸”密码。这将验证输入的密码,而不是散列版本:
#app/models/user.rb
Class User < ActiveRecord::Base
validates :password, length: {minimum: 6}
endhttps://stackoverflow.com/questions/21307515
复制相似问题