CakePHP: очистка поля пароля при неудачной отправке

Приветствую,

Я создаю довольно стандартную регистрационную форму с полем пароля.

Проблема заключается в том, что после неудачной подачи (из-за пустого поля, неправильного формата и т. Д.) Контроллер перезагружает страницу регистрации, но с полем пароля, содержащим хешированное значение ранее введенного пароля. Как сделать его пустым после каждого неудачного представления?

Посмотреть:

echo $form->password('Vendor.password', array('class' => 'text-input')); 

контроллер:

 Security::setHash('sha1'); $this->Auth->sessionKey = 'Member'; $this->Auth->fields = array( 'username' => 'email', 'password' => 'password' ); 

Помощь очень ценится, спасибо!

Вы можете столкнуться с еще одной проблемой с помощью проверки пароля 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; } 

это?

 password('Vendor.password', array('class' => 'text-input','value'=>'')) 

В вашем контроллере:

 function beforeRender() { parent::beforeRender(); $this->data['Vendor']['password'] = ''; }