在我的用户表上,我有一个 128 字符的“hashed_password”字段。在我的 User_model 中,我具有加密和解密密码的功能。加密时,我随机生成一个盐,并将其存储在 hashed_password 字段的前 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;
}