0

我正在使用 Codeigniter 2.0.3 和 DataMapper ORM 1.6.0。CI 中的集成 DataMapper 已成功实施,一切正常,除了密码加密。

users.php用 class调用了模型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});
    }
}

MySQLusers表结构:

id
email
password
last_login
created_on

我通过控制器简单地创建新用户:

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

编辑1:

users.php模型的完整代码在这里


用户成功存储在数据库中,但原始密码未加密。

我究竟做错了什么?

谢谢,问候马里奥

4

2 回答 2

2

我相信这是你的salt类变量丢失了。在您的_encrypt函数中,您调用$this->salt,但是,您永远不会在模型中声明 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
于 2011-10-13T17:39:37.207 回答
-1

我解决了将 DataMapper 升级到 1.8.x 版本的问题。现在,它工作得很好!

于 2011-11-17T22:03:55.140 回答