【问题标题】:Adding a 'fake' field to grocerycrud add/edit form向杂货店添加/编辑表单添加“假”字段
【发布时间】:2012-11-27 09:05:12
【问题描述】:

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

【问题讨论】:

    标签: codeigniter grocery-crud


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多