以下代码无法对用户的密码进行哈希处理,并将密码以明文形式存储在数据库中。更改密码后,我无法登录,因为密码需要处于哈希状态。 以下代码在我的模型中。
'password_confirm'=>array(
'compare' => array(
'rule' => array('password_match', 'password', true),
'message' => 'Password does not match',
'required' => true,
),
'notempty' => array(
'rule' => array('notempty'),
'message' => 'Confirm password is empty',
'allowEmpty' => false,
'required' => true)
),
'password'=>array(
'notempty' => array(
'rule' => array('notempty'),
'message' => 'Password is empty',
'allowEmpty' => false,
'required' => true)
)
function password_match($data, $password_field, $hashed = true)
{
$password = $this->data[$this->alias][$password_field];
$keys = array_keys($data);
$password_confirm = $hashed ?
Security::hash($data[$keys[0]], null, true) :
$data[$keys[0]];
return $password === $password_confirm;
}
以下代码位于我的user_controller
中function change_password(){
#CURRENTLY NOT WORKING
$this->layout = "mainLayout";
$in_user_id = $id = $this->Auth->user('id');
if($this->data){
$this->User->validate['password_confirm']['compare']['rule'] =
array('password_match', 'password', false);
$this->User->set($this->data);
$this->User->useValidationRules('ChangePassword');
if($this->User->validates()){
$this->data['User']['id']=$in_user_id;
$this->User->save($this->data,array('validate'=>false));
}
}
}
答案 0 :(得分:0)
您的模型和验证功能仅检查密码和confirm_password输入是否匹配。它决不会改变数据以散列输入值。
验证输入后,在保存模型之前,需要对密码输入进行哈希处理。像这样:
$this->data[ 'User' ][ 'Password' ] = Security::hash( $this->data[ 'User' ][ 'Password' ], null, true );
答案 1 :(得分:0)
由于它是自动的,你不应该在cake1.3中使用字段名“password”。 使用不同的字段并在保存之前重命名。
如果您想使用更干净的方法,请考虑使用以下行为: http://www.dereuromark.de/2011/08/25/working-with-passwords-in-cakephp/