Пользовательское правило шифрования пароля в DataMapper и Codeigniter - PullRequest
0 голосов
/ 13 октября 2011

Я использую Codeigniter 2.0.3 с DataMapper ORM 1.6.0. Интеграция DataMapper в CI была успешно реализована, и все работает нормально, кроме шифрования пароля.

У меня есть модель под названием users.php с классом Users. Я также установил правила проверки:

var $validation = array(
    array(
        'field' => 'password',
        'label' => 'Password',
        'rules' => array('required', 'trim', 'unique', 'min_length' => 5, 'encrypt'),
    ),
    array(
        'field' => 'email',
        'label' => 'Email Address',
        'rules' => array('required', 'trim', 'valid_email')
    )
);

Моя функция шифрования в правиле проверки:

function _encrypt($field)
{
    // Don't encrypt an empty string
    if (!empty($this->{$field}))
    {
        // Generate a random salt if empty
        if (empty($this->salt))
        {
            $this->salt = md5(uniqid(rand(), true));
        }

        $this->{$field} = sha1($this->salt . $this->{$field});
    }
}

MySQL users структура таблицы:

id
email
password
last_login
created_on

Я просто создаю нового пользователя через контроллер:

$u = new Users();
$u->email = 'mario1@mario-design.info';
$u->password = 'mario';
$u->save();

РЕДАКТ. 1:

Полный код users.php модели здесь .


Пользователь успешно сохранен в базе данных, но исходный пароль не зашифрован.

Что я делаю не так?

Спасибо, С уважением Mario

Ответы [ 2 ]

2 голосов
/ 13 октября 2011

Я считаю, что ваша переменная класса salt отсутствует.В вашей функции _encrypt вы вызываете $this->salt, однако вы никогда не объявляете соль в модели.Я думаю, что вам нужно добавить salt переменную в классе:

// in your Users model
<?php if (!defined('BASEPATH')) exit('No direct script access allowed.');

class Users extends DataMapper {

    var $table = 'users';
    var $has_one = array('profile');
    var $salt = 'B1471tU77IK1411'; // any string - helps to make password encryption stronger
0 голосов
/ 18 ноября 2011

Я решил проблему с обновлением DataMapper до версии 1.8.x.Теперь все работает отлично!

...