CakePHP的:对失败提交清除密码字段(CakePHP: Clearing password fi

2019-08-02 04:57发布

问候,

我设置了密码领域的非常标准的登记表。

问题是,一个失败的提交后(由于空字段,不正确的格式等),控制器重新加载注册页面,但用含有先前输入的密码的散列值的密码字段。 我如何让它空后每个失败的提交?

视图:

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

控制器:

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

帮助非常感谢,谢谢!

Answer 1:

您可能会遇到另一个问题来与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;
}


Answer 2:

这个?

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


Answer 3:

在你的控制器:

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


文章来源: CakePHP: Clearing password field on failed submission