ユーザーテーブルには、128文字の「hashed_password」フィールドがあります。User_modelには、パスワードを暗号化および復号化する機能があります。暗号化するとき、私はランダムにソルトを生成し、それはhashed_passwordフィールドの最初の64文字に格納されます。ハッシュされたpwの結果は、最後の64文字に格納されます。復号化するときは、その逆を行います。
私が推測するように、ほとんど普遍的であるため、表示するプレーンテキストのパスワードはありません。
したがって、ユーザーが(grocery_CRUDを介して)ユーザーを追加/編集しているときに、次のように追加および編集フォームに「password」および「passconf」という偽のフィールドを含めることができると思いました。
$crud->fields('username', ... <other fields> ... 'password', 'passconf');
明確にするために、「password」フィールドと「passconf」フィールドはユーザーテーブルに存在しません。ユーザーに新しいパスワードを入力してもらい、自分なりの方法で処理してもらいたいだけです。
しかし、それは機能しません。つまり、追加/編集フォームは2つの偽のフィールドで正しくレンダリングされます(以下の検証は正しく機能します)が、他のユーザー情報を更新しようとすると、[変更の更新]で、そのアクションは失敗し、グラフィックの「読み込み」が短時間回転しますが、データベースの更新。
私はこれを他の複雑さのない非常に単純なgrocery_CRUDフォームに複製しようとしましたが、同じ動作が得られます。フォームは正しくレンダリングされますが、データベースは更新されません。
偽のフィールドを使用することさえ可能ですか?私は何かが足りないのですか?
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;
}