如何在laravel 5.6中验证当前密码

qnzebej0  于 2023-01-14  发布在  其他
关注(0)|答案(4)|浏览(191)

我是这样试的:

<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ChangePasswordRequest extends FormRequest
{
    ...
    public function rules()
    {
        return [
            'old_password'              => 'required|confirmed',
            'password'                  => 'required|min:6',
            'password_confirmation'     => 'required|min:6|same:password'
        ];
    }
}

我已经正确输入了旧密码,但仍然有一条消息:
旧密码确认不匹配。
我怎样才能解决这个问题?

vybvopom

vybvopom1#

你能做的就是制定一个规则。下面的规则可能会解决你的问题。

当前密码.php

<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Support\Facades\Hash;
class CurrentPassword implements Rule
{
    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        return Hash::check($value,auth()->user()->password);
    }
    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'Current password is incorrect';
    }
}

在你的控制器里,你可以做这样的东西:

$this->validate($request,[
        'password_current'=>['required',new CurrentPassword()],
        'password'=>'required|string|min:6|confirmed',
    ]);
    $request->user()->update([
        'password'=>bcrypt($request->password)
    ]);
sg3maiej

sg3maiej2#

(Laravel v7.x)您正在查找名为“密码”的规则:

...

'old_password' => 'password',
...

您还可以使用规则的第一个参数指定身份验证保护,如下所示:

...
'old_password' => 'password|web',
...

这里是文档:https://laravel.com/docs/7.x/validation#rule-password

j0pj023g

j0pj023g3#

根据文件:

  • Hash::check() * 函数,用于检查用户输入的旧密码是否正确。
if (Hash::check("parameter1", "parameter2")) {
   //add logic here
}

parameter1 - user password that has been entered on the form
parameter2 - old password hash stored in a database

如果正确输入了旧密码,则它将返回true,您可以相应地添加逻辑

  • new_password * 和 * new_confirm_password * 相同,您可以在表单请求中添加验证,如下所示:
'new_password'         => 'required',
'new_confirm_password' => 'required|same:new_password'
e0uiprwp

e0uiprwp4#

“确认”规则并不像您期望的那样。
如果你在一个字段old_password上设置confirmed规则,它会寻找表单输入old_password_confirmation,并检查它的值是否等于old_password的值。它基本上是same:field的逆,带有预定义的预期名称(它会将_confirmation添加到原始名称)。
在您的情况下,您可以像这样使用它,它将执行与当前password_confirmation => same:password规则相同的功能:

public function rules()
{
    return [
        'old_password'              => 'required',
        'password'                  => 'required|min:6|confirmed',
    ];
}

对于您想要实现的目标,您可以创建自己的验证规则或(在我看来更好)检查输入的密码在控制器中是否正确。

相关问题