2

ユーザーテーブルには、128文字の「hashed_pa​​ssword」フィールドがあります。User_modelには、パスワードを暗号化および復号化する機能があります。暗号化するとき、私はランダムにソルトを生成し、それはhashed_pa​​sswordフィールドの最初の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;
}
4

1 に答える 1

2

挿入および更新コールバックを使用してこの問題を解決し、次にパスワードを暗号化し、挿入または更新 db 呼び出しの前に問題のある「パスワード」および「passconf」フィールドを設定解除します。

于 2012-12-10T03:16:19.517 に答える