Laravel 验证检查密码是否存在

Yas*_*jaz 1 php validation laravel

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

. 这是我当前的代码

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

我认为这会生成查询

select count(*) as aggregate from `users` where `password` = 123 and id = 1))
Run Code Online (Sandbox Code Playgroud)

缺少的是我希望对这个密码 (123) 进行散列以进行正确检查。目前,我收到验证错误

选择的密码无效

即使我输入了正确的密码

Llo*_*ple 5

在这种情况下,您应该Validation Rule按照此说明创建自己的

php artisan make:rule ValidatePassword
Run Code Online (Sandbox Code Playgroud)

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

public function __construct(User $user)
{
    $this->user = $user;
}
Run Code Online (Sandbox Code Playgroud)

您应该在passes方法中编写检查密码的逻辑

public function passes($attribute, $value)
{
    return Hash::check($value, $this->user->password);
}
Run Code Online (Sandbox Code Playgroud)

然后,你可以像这样使用它

$validator = $request->validate([
    'password' => ['required', new ValidatePassword(auth()->user())]
]);
Run Code Online (Sandbox Code Playgroud)

确保导入User,ValidatePasswordHash,为简洁起见,我跳过了它。