问候,
我正在设置一个非常标准的注册表单,其中包含密码字段.
问题是,在提交失败后(由于空字段,格式不正确等),控制器重新加载注册页面,但密码字段包含先前输入的密码的哈希值.每次提交失败后如何将其清空?
视图:
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’,而不是使用特殊字段名称’password’.这样,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... );
最后,在Vendor模型中,实现beforeSave().
首先,查看数据是否有效(‘tmp_pass’将根据您的规则进行验证).
如果成功,请手动散列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; }