Приветствую,
Я создаю довольно стандартную регистрационную форму с полем пароля.
Проблема заключается в том, что после неудачной подачи (из-за пустого поля, неправильного формата и т. Д.) Контроллер перезагружает страницу регистрации, но с полем пароля, содержащим хешированное значение ранее введенного пароля. Как сделать его пустым после каждого неудачного представления?
Посмотреть:
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'] = ''; }