CakePHP 3 -比较密码

zc0qhyus  于 2022-11-11  发布在  PHP
关注(0)|答案(3)|浏览(121)

我有两个字段“password”(此字段在数据库中)和confirm_password(此字段不在数据库中)
好吧,我需要比较如果密码== confirm_password..但我不知道创建一个自定义验证“confirm_password ...”将需要在数据库中有这个字段吗?
我该怎么办?

xdyibdwo

xdyibdwo1#

通常,您可以通过$context参数访问自定义验证规则中的所有数据,这些数据存储在data键(即$context['data']['confirm_password'])中,然后您可以将其与当前字段值进行比较。

$validator->add('password', 'passwordsEqual', [
    'rule' => function ($value, $context) {
        return
            isset($context['data']['confirm_password']) &&
            $context['data']['confirm_password'] === $value;
    }
]);

也就是说,最近引入了一个compareWith验证规则,它正是这样做的。


$validator->add('password', [
    'compare' => [
        'rule' => ['compareWith', 'confirm_password']
    ]
]);
hfsqlsce

hfsqlsce2#

现在,对于3.2或更高版本,在验证器类中有一个方法调用sameAs。

$validator -> sameAs('password_match','password','Passwords not equal.');

请参阅API

dy1byipe

dy1byipe3#

我知道现在回答太迟了,但对其他人会有帮助。

// Your password hash value (get from database )
$hash = '$2y$10$MC84b2abTpj3TgHbpcTh2OYW5sb2j7YHg.Rj/DWiUBKYRJ5./NaRi';
$plain_text = '123456'; // get from form and do not make hash. just use what user entred.

if (password_verify($plain_text, $hash)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}

$hasher = new DefaultPasswordHasher();
$check = $hasher->check($plain_text,$hash); // it will return true/false

相关问题