Пароль не хэшируется в cakephp - PullRequest
0 голосов
/ 22 октября 2011

следующий код не может хэшировать пароль пользователя, и он хранит пароль в виде открытого текста в базе данных. После изменения пароля я не могу войти, так как пароль должен быть в хеше. Следующий код в моей модели.

'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 голосов
/ 22 октября 2011

Вы не должны использовать имя поля «пароль» в cake1.3 из-за его автоматического. используйте другое поле и переименуйте его перед сохранением.

Если вы хотите использовать более чистый подход, подумайте о том, чтобы использовать поведение: http://www.dereuromark.de/2011/08/25/working-with-passwords-in-cakephp/

0 голосов
/ 22 октября 2011

Ваша модель и функция проверки только проверяют, совпадают ли введенные пароль и пароли подтверждения. Ни при каких условиях он не изменяет данные для хеширования входного значения.

После того, как вы подтвердите свой ввод и перед сохранением своей модели, вам нужно будет хэшировать ввод пароля. Примерно так:

$this->data[ 'User' ][ 'Password' ] = Security::hash( $this->data[ 'User' ][ 'Password' ], null, true );
...