验证散列密码字段在Laravel 4.1中是唯一的

时间:2014-05-12 14:58:32

标签: 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'
);

如果我尝试使用数据库中已存在的用户名和电子邮件创建新记录,则验证会像它应该的那样选择它。但是,它将允许重复密码。

我认为这可能与密码被哈希的事实有关。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果你做的时间:

$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;

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

答案 1 :(得分:0)

密码不需要是唯一的,这主要是矫枉过正。但是,我建议利用确认验证规则,这意味着您有一个password_confirmation字段,例如

{{表格::密码('密码',['必需' =>'必需'])}}

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

和验证:

'密码' => '确认'