1

CakePHP 2.4

新しいユーザーを追加するとき、データベースに保存する前にパスワードをハッシュする必要があります。そうするために私はした:

//UsersController
public $helpers = array('Html', 'Form');
public $components = array(
    'Session',
    'Auth' => array(
    'loginRedirect' => array('controller' => 'users', 'action' => 'home', 'home'),
    'logoutRedirect' => array('controller' => 'users', 'action' => 'logout')
    )
);
public function add(){
    if($this->request->is('post')){
        $this->User->create();
        if($this->User->save($this->request->data)){
            $this->Session->setFlash('Saved!');
        }
    }
}

//UserModel
public function beforeSave(){
    if(isset($this->data[$this->alias]['password']))
        $this->data[$this->alias]['password'] = md5($this->data[$this->alias]['password']);
    return true;
}

//add.ctp
echo $this->Form->create();
echo $this->Form->input('text', array('label'=>'Username', 'name'=>'username'));
echo $this->Form->input('text', array('label'=>'Full name', 'name'=>'fullname'));
echo $this->Form->input('password', array('label'=>'Password', 'name'=>'password'));
echo $this->Form->input('text', array('label'=>'Password hint', 'name'=>'pass_hint'));
echo $this->Form->input('text', array('label'=>'Email', 'name'=>'email'));
echo $this->Form->input('text', array('label'=>'Contact', 'name'=>'cell'));
echo $this->Form->end('Create account');

しかし問題は、パスワードがハッシュ化されずに保存されていることです!

前もって感謝します...

更新:ビュー コードを次のように変更しました

echo $this->Form->create('User');
echo $this->Form->input('username', array('label'=>'Username'));
echo $this->Form->input('fullname', array('label'=>'Full name'));
echo $this->Form->input('pwd', array('label'=>'Password', 'type'=>'password'));
echo $this->Form->input('pass_hint', array('label'=>'Password hint'));
echo $this->Form->input('email', array('label'=>'Email'));
echo $this->Form->input('cell', array('label'=>'Contact'));
echo $this->Form->end('Create account');
4

3 に答える 3

2

User理由はわかりませんが、ユーザー テーブルを使用してプロジェクトを作成したところ、CakePHP 2.4 がモデルにUserModel. だから、私は私の名前をからに変更UserModelUser、魔法のように私のために働いています:)

于 2013-09-18T16:37:41.460 に答える
0

入力タイプに name 属性を設定してデフォルトの動作を変更している場合、

name 属性を削除すると、機能します。

チェックしているユーザーモデルの beforesave 関数で

if(isset($this->data[$this->alias]['password']))

このようにパスワードを設定しているため、もう存在しません

echo $this->Form->input('password', array('label'=>'Password', 'name'=>'password'));

に変更します

echo $this->Form->input('User.password', array('label'=>'Password'));

アップデート

また、このようにフォームを更新すると、完全に機能します。

echo $this->Form->create('User');
echo $this->Form->input('username', array('label'=>'Username'));
echo $this->Form->input('fullname', array('label'=>'Full name'));
echo $this->Form->input('password', array('label'=>'Password', 'name'=>'password'));
echo $this->Form->input('pass_hint', array('label'=>'Password hint'));
echo $this->Form->input('email', array('label'=>'Email'));
echo $this->Form->input('cell', array('label'=>'Contact'));
echo $this->Form->end('Create account');
于 2013-09-18T06:31:38.370 に答える
0

add アクションの重要な部分を忘れていました:

public function add(){
    if ($this->request->is('post')){
        $this->User->create(); // important!
        if ($this->User->save($this->request->data)){
            $this->Session->setFlash('Saved!');
        }
    }
}

あなたのケースでは(時々)うまくいくかもしれませんが、 beforeFilter() コールバックなどで sth を実行すると、簡単に壊れることがあります

于 2013-09-18T17:22:14.387 に答える