Bạn có thể chạy vào một vấn đề khác xuống đường với CakePHP xác nhận mật khẩu.
Vấn đề là mật khẩu băm bánh trước tiên, sau đó không xác thực, điều này có thể khiến đầu vào bị lỗi ngay cả khi nó hợp lệ theo quy tắc của bạn. Đây là lý do tại sao mật khẩu được trả lại cho trường nhập được băm thay vì bình thường.
để khắc phục điều này, thay vì sử dụng tên trường đặc biệt 'mật khẩu', hãy sử dụng tên khác như 'tmp_pass'. Bằng cách này, CakePHP Auth sẽ không tự động băm trường.
Dưới đây là một mẫu
echo $form->create('Vendor', array('action' => 'register'));
echo $form->input('email');
echo $form->input('tmp_pass', array('label' => 'Password','type'=>'password'));
echo $form->end('Register');
Trong mô hình bán hàng của bạn, đừng gán quy tắc xác nhận để 'mật khẩu' thay vì chỉ định các quy tắc để 'tmp_pass', ví dụ
var $validate = array('email' => 'email', 'password' => ... password rules...);
trở thành
var $validate = array('email' => 'email', 'tmp_pass' => ... password rules...);
Cuối cùng, trong mô hình Nhà cung cấp của bạn, hãy triển khai beforeSave().
Trước tiên, hãy xem liệu dữ liệu hợp lệ hóa ('tmp_pass' sẽ được xác thực theo quy tắc của bạn).
Nếu thành công, hãy tự băm tmp_pass và đặt nó vào $ this-> data ['Vendor'] ['password'] rồi trả về true. Nếu không thành công, trả về false.
function beforeSave() {
if($this->validates()){
$this->data['Vendor']['password'] = sha1(Configure::read('Security.salt') . $this->data['User']['tmp_pass']);
return true;
}
else
return false;
}
+1 - điều này cũng rất hữu ích cho tôi, tuy nhiên tôi khuyên bạn nên sử dụng các hàm 'Auth-> password()' hoặc 'Auth-> hashPasswords()' đúng hơn hơn là ngâm mình và băm. – nickf
Bạn không nên ** tự băm mật khẩu bằng 'sha1', vì điều này ** có thể ** giới thiệu mâu thuẫn với cách' Auth' (nếu đó là những gì bạn đang sử dụng), hãy băm mật khẩu xuống đường. Sử dụng '$ this-> Auth-> password()' để thay thế! – deceze
@deceze, nhìn vào nguồn, 'Auth :: hashPasswords()' sẽ gọi hàm 'User :: hashPassword()' nếu nó được định nghĩa, trong khi 'Auth :: password()' thì không. – nickf