您可能会在使用 cakePHP 密码验证的过程中遇到另一个问题。
问题是cake首先对密码进行哈希处理,然后进行验证,即使根据您的规则有效,也可能导致输入失败。这就是为什么密码返回到输入字段的原因是散列而不是正常的。
要解决此问题,不要使用特殊字段名称“密码”,而是使用不同的名称,例如“tmp_pass”。这样,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');
在您的 Vendor 模型中,不要将验证规则分配给“密码”,而是将这些规则分配给“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;
}