Ho una password memorizzata a database
hash con azione DefaultPasswordHasher
a add
.DefaultPasswordHasher che genera hash diversi per lo stesso valore
Ho un'altra azione per modificare la password per l'utente che ha effettuato l'accesso, in questo modulo ho un campo chiamato current_password
che ho bisogno di confrontare con il valore della password corrente da database
.
Il problema è che DefaultPasswordHasher
sta generando un hash diverso per ogni volta che sto tagliando il valore del modulo in modo che questo non possa mai corrispondere con l'hash dal database.
seguire il codice di validazione del campo 'current_password':
->add('current_password', 'custom', [
'rule' => function($value, $context){
$user = $this->get($context['data']['id']);
if ($user) {
echo $user->password; // Current password value hashed from database
echo '<br>';
echo $value; //foo
echo '<br>';
echo (new DefaultPasswordHasher)->hash($value); // Here is displaying a different hash each time that I post the form
// Here will never match =[
if ($user->password == (new DefaultPasswordHasher)->hash($value)) {
return true;
}
}
return false;
},
'message' => 'Você não confirmou a sua senha atual corretamente'
])
Questo è probabilmente "sale"; è una buona cosa, perché significa che non puoi guardare nel database e trovare tutte le persone la cui password è "password". È necessario verificare la password rispetto all'hash con la funzione appropriata, non confrontare il vecchio hash con il nuovo. – IMSoP
Come detto @IMSoP, vedere ** http: //api.cakephp.org/3.0/class-Cake.Auth.DefaultPasswordHasher.html#_check** – ndm