CakePHP: başarısız gönderme parola alanını temizleme

3 Cevap php

Selamlar,

Ben şifre alanı ile oldukça standart bir kayıt formu kuruyorum.

Sorun denetleyici ama önceden girilen şifre karma değerini içeren parola alanına sahip, kayıt sayfasını yeniden yükler, (nedeniyle boş alanda, yanlış biçim vb için) başarısız sunulmasından sonra, olduğunu. Her gönderme başarısız sonra nasıl boş yapabilirim?

Görünüm:

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

Denetleyici:

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

Yardım çok takdir, teşekkür!

3 Cevap

Sen cakePHP şifre doğrulama ile yolda başka bir sorun haline çalıştırmak olabilir.

The problem is that cake hashes passwords first, then does validation, which can cause the input to fail even if it is valid according to your rules. This is why the password is returned to the input field hashed instead of normal.


Bunu düzeltmek için, bunun yerine özel alan adı 'şifre' kullanarak, 'tmp_pass' gibi farklı bir ad kullanın. Bu şekilde, cakePHP Auth otomatik alan karma olmaz.

İşte örnek bir formun

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');


Vendor modelde yerine örneğin, 'tmp_pass' bu kuralları atamak 'şifre' için doğrulama kuralları atama yok

var $validate = array('email' => 'email', 'password' => ... password rules... );

olur

var $validate = array('email' => 'email', 'tmp_pass' => ... password rules... );


Son olarak, Vendor model, BeforeSave uygulamak ().

Veri doğrulama ('tmp_pass' Lütfen kurallara karşı doğrulanmış olacak) İlk olarak, bkz.

Başarılı, elle karma tmp_pass ve $ koydum this-> data ['Vendor'] ['password'] doğruysa dönerseniz. Başarısız olursa, return 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;
}

Bu?

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

Sizin denetleyicisi:

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