I am trying to set up a form that allows the user to change their password using CakePHP 2.3. The algorithm used is blowfish. I have three fields:
<?php echo $this->Form->input('old_password', array('type' => 'password', 'autocomplete' => 'off')); ?> <?php echo $this->Form->input('new_password', array('type' => 'password', 'autocomplete' => 'off')); ?> <?php echo $this->Form->input('new_password_confirm', array('type' => 'password', 'autocomplete' => 'off', 'label' => 'Confirm Password')); ?>
Here is the code where I am trying to verify that they entered their old password correctly:
$hash = Security::hash($this->request->data['User']['old_password'], 'blowfish'); $correct = $this->User->find('first', array( 'conditions' => array( 'User.id' => AuthComponent::user('id'), 'User.password' => $hash ), 'fields' => array('id') ));
The problem is that even if I type the old password correctly, Cake never finds the user, because it does not seem to calculate the correct hash. Each time I submit a form with the same old password, Cake generates a different hash each time. This is probably due to the fact that I do not understand how the blowfish / bcrypt algorithm works, but I can not understand it.
What am I missing here?
source share