Вы можете столкнуться с другой проблемой вниз по дороге с проверкой пароля CakePHP.
Проблема заключается в том, что сначала хранятся пароли хешей торта, , тогда делает валидацию, которая может привести к сбою ввода, даже если она действительна в соответствии с вашими правилами. Вот почему пароль возвращается в поле ввода вместо хэша.
, чтобы исправить это, вместо того, чтобы использовать имя специального поля «пароль», используйте другое имя, как «tmp_pass». Таким образом, cakePHP Auth не будет автоматически заполнять поле.
Вот образец формы
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');
В модели поставщика, не следует назначать правила проверки на «пароль», а не назначать эти правила к «tmp_pass», например
var $validate = array('email' => 'email', 'password' => ... password rules...);
будет
var $validate = array('email' => 'email', 'tmp_pass' => ... password rules...);
Наконец, в вашей модели поставщика реализуйте beforeSave().
Прежде всего, проверьте, проверены ли данные («tmp_pass» будет проверен на соответствие вашим правилам).
В случае успеха вручную hash tmp_pass и поместите его в $ this-> data ['Vendor'] ['password'], затем верните true. Если не удалось, верните 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 - это тоже очень полезно для меня, однако я бы предложил использовать правильные 'Auth-> password()' или 'Auth-> hashPasswords()' функции, а чем солить и хешировать себя. – nickf
Вы должны ** не ** хешировать пароль самостоятельно с помощью 'sha1', так как это ** может ** ввести несогласованности с методом' Auth' (если это то, что вы используете) хэширует пароль по дороге. Вместо этого используйте '$ this-> Auth-> password()'! – deceze
@deceze, глядя на источник, 'Auth :: hashPasswords()' будет вызывать функцию 'User :: hashPassword()', если она определена, тогда как 'Auth :: password()' does not. – nickf