Laravel验证检查密码是否存在

时间:2017-10-18 08:56:24

标签: php laravel validation

我想检查数据库中的特定用户的密码是否正确。我想为此目的使用Laravel验证

。 这是我目前的代码

$validator = $request->validate([
        'password' => ['required',Rule::exists('users')->where(function ($query) { $query->where('id',Auth::id()); })]
    ]);

我认为这会生成查询

select count(*) as aggregate from `users` where `password` = 123 and id = 1))

缺少的是我希望对此密码(123)进行哈希处理以便正确检查。 目前,我收到了验证错误

  

所选密码无效

即使我输入了正确的密码

1 个答案:

答案 0 :(得分:3)

在这种情况下,您应该在enter image description here

之后创建自己的Validation Rule
php artisan make:rule ValidatePassword

在生成的文件中,添加构造函数方法以接收要验证密码的用户

public function __construct(User $user)
{
    $this->user = $user;
}

您应该在passes方法

中编写用于检查密码的逻辑
public function passes($attribute, $value)
{
    return Hash::check($value, $this->user->password);
}

然后,您可以像

一样使用它
$validator = $request->validate([
    'password' => ['required', new ValidatePassword(auth()->user())]
]);

请务必导入UserValidatePasswordHash,为简洁起见,我跳过了。