add
eyleminde DefaultPasswordHasher
hashed ile database
hashed'de saklanan bir parolam var.DefaultPasswordHasher aynı değer için farklı karma üretiyor
Oturum açmış olan kullanıcının parolasını değiştirmek için başka bir işlem yapıyorum, bu formda current_password
adı verilen bir alanım var. database
geçerli parola değeriyle karşılaştırmam gerekiyor.
Sorun, DefaultPasswordHasher
'un her zaman için, formun değerini yazdığım her zaman için farklı bir özet üretmesidir, bu hiçbir zaman veritabanından karma ile eşleşmeyecektir.
->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'
])
; Bu iyi bir şey, çünkü veritabanına bakıp parola "parola" olan tüm insanları bulamıyorsunuz demektir. Şifreyi ilgili işleve sahip karma ile doğrulamanız gerekir, eski hash ile yeni karşılaştırılamaz. – IMSoP
As @IMSoP, bkz. ** http: //api.cakephp.org/3.0/class-Cake.Auth.DefaultPasswordHasher.html#_check** – ndm