问候,
我设置了密码领域的非常标准的登记表。
问题是,一个失败的提交后(由于空字段,不正确的格式等),控制器重新加载注册页面,但用含有先前输入的密码的散列值的密码字段。 我如何让它空后每个失败的提交?
视图:
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的验证不会自动散列场。
下面是一个样表
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”将会对你的规则进行验证)。
如果成功的话,手动哈希tmp_pass并把它放在$这个 - >数据[“供应商”] [“密码”],然后返回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'] = '';
}