我正在使用Codeigniter 2.0.3和DataMapper ORM 1.6.0。 CI中的集成DataMapper已成功实施,除密码加密外,一切正常。
我的模型叫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
模型here的完整代码。
用户已成功存储在数据库中,但原始密码未加密。
我做错了什么?
谢谢,问候 马里奥
答案 0 :(得分: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
答案 1 :(得分:-1)
我解决了将DataMapper升级到1.8.x版本的问题。现在,它运作得很好!