2

在我的用户表上,我有一个 128 字符的“hashed_pa​​ssword”字段。在我的 User_model 中,我具有加密和解密密码的功能。加密时,我随机生成一个盐,并将其存储在 hashed_pa​​ssword 字段的前 64 个字符中。散列后的 pw 结果存储在最后 64 个字符中。解密时我做相反的事情。

我猜几乎是通用的,永远不会显示明文密码。

因此,当我的用户(通过grocery_CRUD)添加/编辑用户时,我认为可以在添加和编辑表单中包含虚假字段:“password”和“passconf”:

$crud->fields('username', ... <other fields> ... 'password', 'passconf');

只是为了清楚 - 我的用户表上不存在“密码”和“密码”字段。我只希望我的用户在那里输入新密码,然后以我自己的方式处理它。

但它不起作用。我的意思是添加/编辑表单正确呈现了两个假字段(下面的验证正常工作)但是如果我尝试更新任何其他用户信息然后“更新更改”,该操作将失败,“加载”图形短暂旋转但没有更新数据库。

我已经尝试在一个非常简单的grocery_CRUD 表单上复制它,没有其他复杂性并获得相同的行为:表单正确呈现但不会更新数据库。

甚至可以使用字段吗?我错过了什么吗?

杂货店_CRUD 是否试图在导致数据库更新失败的幕后处理这些字段?

我当时希望做以下事情:

$crud->set_rules('password', 'Password', 'callback_valid_password');
$crud->set_rules('passconf', 'Password Confirmation', 'matches[password]');

$crud->callback_before_insert(array($this,'encrypt_password_callback'));
$crud->callback_before_update(array($this,'encrypt_password_callback'));

function encrypt_password_callback($post_array, $primary_key = null){
    if ($post_array['password'] <> '') {
        $this->User_model->set_password($post_array['username'], $post_array['password']);
    }
}

function valid_password($str) {
    //do some pw validation
    return TRUE;
}
4

1 回答 1

2

我已经使用插入和更新回调解决了这个问题,然后加密密码,然后在插入或更新数据库调用之前取消设置有问题的“密码”和“密码”字段。

于 2012-12-10T03:16:19.517 回答