CakePHP 3.0 - Сравните пароль базы данных со старым паролем при смене пароля

Я работаю над CakePHP 3.0 и хотел бы сравнить пароль базы данных со старым паролем, введенным в форму в функции «Изменить пароль». Но я не могу этого сделать, так как пароль хэшируется, а хешированный пароль каждый раз разный, даже если мы используем один и тот же пароль.

Пожалуйста, помогите мне в этом.

Заранее спасибо, Мели


person eme    schedule 11.06.2015    source источник
comment
возможный дубликат DefaultPasswordHasher, генерирующий другой хэш для одного и того же значения   -  person ndm    schedule 11.06.2015


Ответы (1)


Я бы сделал это в валидаторе вашей UsersTable.

источник/Модель/Таблица/UsersTable.php

$validator
            ->notEmpty('current_password')
                ->add('current_password', 'custom', [
                    'rule' => 

                    function($value, $context) {
                        $query = $this->find()
                                ->where([
                                    'id' => $context['data']['id']
                                ])
                                ->first();

                        $data = $query->toArray();

                        return (new DefaultPasswordHasher)->check($value, $data['password']);
                    },
                    'message' => 'Current password is incorrect!'
                ]);

Пользовательские правила проверки

person Tom    schedule 12.06.2015