Validation 验证哈希密码字段在Laravel 4.1中是否唯一

Validation 验证哈希密码字段在Laravel 4.1中是否唯一,validation,laravel-4,Validation,Laravel 4,我试图确保所有密码都是唯一的。我在模型中设置了以下规则: public static $signup_rules = array( 'username' => 'required|min:6|unique:users', 'email' => 'required|email|unique:users', 'password' => 'required|min:6|unique:users' ); 如果我试图用数据库中已经存在的用户名和电子邮

我试图确保所有密码都是唯一的。我在模型中设置了以下规则:

public static $signup_rules = array(
    'username'  => 'required|min:6|unique:users',
    'email'     => 'required|email|unique:users',
    'password'  => 'required|min:6|unique:users'
);
如果我试图用数据库中已经存在的用户名和电子邮件创建一个新记录,那么验证会像应该的那样将其提取出来。但是,它将允许重复密码

我认为这可能与密码被散列有关

提前感谢您的帮助。

如果您需要:

$a = Hash::make('antonio');
$b = Hash::make('antonio');

if ($a !== $b) echo "hashes are always different!";
您将看到哈希值总是不同的,因此使用Laravel的哈希系统无法检查两个密码是否相同

如果希望用户在系统中只使用一次密码,则必须逐个检查:

foreach(User::all() as $user)
{
    if (Hash::check($password, $user->password))
    {
       return true;
    }
}

return false;

这有点慢而且疯狂。而且,正如评论中所说,为什么您需要在系统中使用唯一的密码。这是一个巨大的安全风险,因为您会告诉某人您的系统中有另一个人正在使用他想使用的密码。

密码不必是唯一的,这太过分了。但是,我建议使用确认验证规则,这意味着您有一个密码确认字段,例如

{{Form::password('password',['required'=>'required'])}

{{Form::password('password_confirmation',['required'=>'required'])}

和验证:


“密码”=>“已确认”

为什么希望密码是唯一的?没有必要。如果你真的担心安全性,那么最好强制执行一个级别的密码复杂性(肯定超过“6”个字符)。您的问题是密码将被加密-因此,即使两个用户拥有“相同”的密码-它在数据库中看起来也会不同,因此Laravel的“唯一”规则在大多数情况下都不起作用。您可以反转
返回true
返回false
,但这不是您回答的重点。谢谢Antonio,你的回答很有道理。我同意你的建议,让密码更强大,不必担心它们是唯一的。