我正在努力确保所有密码都是唯一的。我在我的模型中设置了以下规则:
public static $signup_rules = array(
'username' => 'required|min:6|unique:users',
'email' => 'required|email|unique:users',
'password' => 'required|min:6|unique:users'
);
如果我尝试使用数据库中已存在的用户名和电子邮件创建新记录,则验证会像它应该的那样选择它。但是,它将允许重复密码。
我认为这可能与密码被哈希的事实有关。
提前感谢您的帮助。
答案 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'])}}
和验证:
'密码' => '确认'