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

问候,

我正在设置一个非常标准的注册表单,其中包含密码字段.

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

视图:

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;
}

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...