CakePHP 3.0 - Compare Database Password with the o

2019-05-07 14:13发布

问题:

I am working on CakePHP 3.0 and I would like to compare the database password with the old password entered in the form in "Change Password" functionality. But I am not able to do so since the password is hashed and the hashed password is different every time even if we use the same password.

Please help me in this.

Thanks in advance, Melee

回答1:

I would do this in the validator of your UsersTable.

src/Model/Table/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!'
                ]);

Custom validation rules