密码不会在cakephp中哈希

时间:2011-10-22 03:10:00

标签: cakephp cakephp-1.3

以下代码无法对用户的密码进行哈希处理,并将密码以明文形式存储在数据库中。更改密码后,我无法登录,因为密码需要处于哈希状态。 以下代码在我的模型中。

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

2 个答案:

答案 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/