0

私はDataMapperORM1.6.0でCodeigniter2.0.3を使用しています。CIへの統合DataMapperは正常に実装されており、パスワードの暗号化を除いてすべて正常に機能しています。

users.phpクラスで呼び出されたモデルがありUsersます。また、検証ルールを設定しました。

var $validation = array(
    array(
        'field' => 'password',
        'label' => 'Password',
        'rules' => array('required', 'trim', 'unique', 'min_length' => 5, 'encrypt'),
    ),
    array(
        'field' => 'email',
        'label' => 'Email Address',
        'rules' => array('required', 'trim', 'valid_email')
    )
);

検証ルールの暗号化機能:

function _encrypt($field)
{
    // Don't encrypt an empty string
    if (!empty($this->{$field}))
    {
        // Generate a random salt if empty
        if (empty($this->salt))
        {
            $this->salt = md5(uniqid(rand(), true));
        }

        $this->{$field} = sha1($this->salt . $this->{$field});
    }
}

MySQLusersテーブル構造:

id
email
password
last_login
created_on

コントローラを介して新しいユーザーを作成するだけです。

$u = new Users();
$u->email = 'mario1@mario-design.info';
$u->password = 'mario';
$u->save();

編集1:

users.phpモデルの完全なコードはこちら


ユーザーはデータベースに正常に保存されましたが、元のパスワードは暗号化されていません。

私は何が間違っているのですか?

ありがとう、マリオよろしく

4

2 に答える 2

2

saltクラス変数が欠落していると思います。_encrypt関数では、を呼び出しますが$this->salt、モデルでsaltを宣言することはありません。saltクラスに変数を追加する必要があると思います。

// in your Users model
<?php if (!defined('BASEPATH')) exit('No direct script access allowed.');

class Users extends DataMapper {

    var $table = 'users';
    var $has_one = array('profile');
    var $salt = 'B1471tU77IK1411'; // any string - helps to make password encryption stronger
于 2011-10-13T17:39:37.207 に答える
-1

DataMapperを1.8.xバージョンにアップグレードする際の問題を解決しました。今、それはうまく機能します!

于 2011-11-17T22:03:55.140 に答える