您可能会在 cakePHP 密码验证过程中遇到另一个问题。
问题是 cake 首先对密码进行哈希处理,then进行验证,这可能会导致输入失败,即使根据您的规则它是有效的。这就是为什么密码以散列形式返回到输入字段而不是正常形式的原因。
要解决此问题,请使用不同的名称(例如“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');
例如,在您的供应商模型中,不要将验证规则分配给“password”,而是将这些规则分配给“tmp_pass”
var $validate = array('email' => 'email', 'password' => ... password rules... );
becomes
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;
}