CakePHP:在提交失败时清除密码字段

时间:2009-08-23 14:37:08

标签: php cakephp passwords authentication

问候,

我正在使用密码字段设置一个非常标准的注册表单。

问题是,在提交失败后(由于空字段,格式不正确等),控制器重新加载注册页面,但密码字段包含先前输入的密码的哈希值。如何在每次提交失败后将其清空?

查看:

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

控制器:

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

非常感谢帮助,谢谢!

3 个答案:

答案 0 :(得分:9)

使用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... );

最后,在您的供应商模型中,实现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;
}

答案 1 :(得分:8)

此?

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

答案 2 :(得分:3)

在您的控制器中:

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