Tôi có mật khẩu được lưu trữ tại database
được băm với DefaultPasswordHasher
tại hành động add
.DefaultPasswordHasher tạo băm khác nhau cho cùng một giá trị
Tôi có một hành động khác để thay đổi mật khẩu cho người dùng đã đăng nhập, trên biểu mẫu này Tôi có một trường được gọi là current_password
mà tôi cần so sánh với giá trị mật khẩu hiện tại từ database
.
Vấn đề là DefaultPasswordHasher
tạo ra một mã băm khác nhau cho mỗi lần tôi băm giá trị của biểu mẫu để điều này sẽ không bao giờ khớp với băm từ cơ sở dữ liệu.
theo mã xác nhận của trường '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'
])
Đây có lẽ là "muối"; đó là một điều tốt, bởi vì nó có nghĩa là bạn không thể nhìn vào cơ sở dữ liệu và tìm thấy tất cả những người có mật khẩu là "mật khẩu". Bạn cần phải xác minh mật khẩu đối với hàm băm bằng hàm thích hợp, không so sánh hàm băm cũ với hàm băm mới. – IMSoP
Như @IMSoP đã nói, hãy xem ** http: //api.cakephp.org/3.0/class-Cake.Auth.DefaultPasswordHasher.html#_check** – ndm