【问题标题】:Encrypt password custom rule in DataMapper and Codeigniter在 DataMapper 和 Codeigniter 中加密密码自定义规则
【发布时间】:2011-10-13 09:18:22
【问题描述】:

我正在使用 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});
    }
}

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型号here的完整代码。


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

我做错了什么?

谢谢,问候 马里奥

【问题讨论】:

  • 我们能看到你的完整users.php 模型吗?您的代码是正确的,所以我假设找不到验证规则。
  • @swatkins 我已经用完整的users.php 模型代码链接更新了我的第一篇文章。

标签: codeigniter passwords password-encryption codeigniter-datamapper


【解决方案1】:

我相信你的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

【讨论】:

  • 感谢您的回复。我也尝试过,但没有成功。问题依然存在..
  • 您是否尝试过使用无效电子邮件提交以测试您的验证是否被调用?
  • 是的,我检查了电子邮件地址验证并且它有效。我解决了将 DataMapper 升级到 1.8.x 版本的问题。现在,它工作得很好!谢谢..
  • 您可能想要回答您更新的这个问题并将其标记为已接受的答案。这样,这个问题就不会再出现在“未回答”中了。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-11
    • 2010-11-06
    • 2012-04-05
    • 1970-01-01
    • 2015-08-22
    • 2012-11-19
    • 2021-10-09
    • 2011-03-06
    相关资源
    最近更新 更多