【发布时间】:2012-11-27 09:05:12
【问题描述】:
在我的用户表上,我有一个 128 字符的“hashed_password”字段。在我的 User_model 中,我具有加密和解密密码的功能。加密时,我随机生成一个盐,并将其存储在 hashed_password 字段的前 64 个字符中。散列后的 pw 结果存储在最后 64 个字符中。解密时我做相反的事情。
我猜几乎是通用的,永远不会显示明文密码。
所以,当我的用户(通过grocery_CRUD)添加/编辑用户时,我认为可以在添加和编辑表单中包含fake字段:“password”和“passconf”以下:
$crud->fields('username', ... <other fields> ... 'password', 'passconf');
为了清楚起见 - 我的用户表中不存在“密码”和“密码”字段。我只是希望我的用户在那里输入新密码,然后以我自己的方式处理它。
但它不起作用。我的意思是添加/编辑表单正确呈现了两个假字段(下面的验证正常工作)但是如果我尝试更新任何其他用户信息然后“更新更改”,该操作将失败,“加载”图形短暂旋转但没有更新数据库。
我尝试在非常简单的grocery_CRUD 表单上复制它,没有其他复杂性,并获得相同的行为:表单正确呈现但不会更新数据库。
甚至可以使用 fake 字段吗?我错过了什么吗?
grocery_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;
}
【问题讨论】: