0

$this->request->data から収集したユーザー情報をテキスト フィールドに事前入力するユーザー プロファイル更新ページがあります。パスワード フィールドにデータベースからの暗号化されたパスワードと思われるものが事前に入力されていることを除いて、すべて正常に動作します。そのため、保存時に、パスワードが許可されている文字数を超えているため、検証に失敗し、保存されていても、次に、意味がある場合は、ユーザーの実際のパスワードを暗号化された同じパスワードに置き換えます。

これに対する最善の回避策は何でしょうか?

コントローラ:

 public function profile() {
    if($this->request->is('post') || $this->request->is('put')) {
        if($this->Auth->user("id") == $this->request->data['User']['id']) {
            $this->request->data['User']['user_status_id'] = $this->Auth->user("user_status_id");
            $this->request->data['User']['user_type_id'] = $this->Auth->user("user_type_id");
            if($this->User->save($this->request->data)) {
                $this->Session->setFlash('Your profile has been updated','default',array('class'=>'success'));
            } else {
                $this->Session->setFlash("An error has occured updating your profile.");
            }
        } else {
            $this->Session->setFlash("Unable to save this result as there is an ID mismatch.");
        }
    } else {
        $this->request->data = $this->User->read(null,$this->Auth->user("id"));
    }
}

意見:

  <h1>Profile</h1>
 <h3>Update your profile</h3>
 <div class="left">
<div class="formContainer">
<?php 
    echo $this->Form->create('User');
        echo $this->Form->input('username',array("id" => "profileUsername"));
        echo $this->Form->input('password',array("id" => "profilePassword"));
        echo $this->Form->input('company');
        echo $this->Form->input('first_name');
        echo $this->Form->input('last_name');
        echo $this->Form->input('telephone');
        echo $this->Form->input('fax');
        echo $this->Form->input('id',array('type' => 'hidden'));
    echo $this->Form->end(__('Update'));
    ?>
 </div>
 </div>
4

4 に答える 4

2

あなたが抱えている問題は、パスワードを(一方向ハッシュで)必要に応じて保存した場合、それを元に戻してプレーンテキストバージョンを表示できないため、パスワードデータを単にnullに設定できることです(パスワードフィールドを残して空の):

$this->request->data['User']['password'] = NULL;

次に、2 つのオプションがあります。

  1. データを更新するためにユーザーのパスワードを要求する (ちょっとしたセキュリティ対策)

  2. ユーザーが新しいパスワードを入力した場合にのみ、ユーザーのパスワードを更新します

2 番目のオプションは、パスワード検証ルールを に設定している場合、検証を破る可能性があります。この場合、これらのいずれかに従うことでallowEmpty => false複数の検証セットを使用できます (すべて cakephp 2.x で機能します) 。

于 2012-07-22T08:23:15.200 に答える
0

これを読んで、この動作を使用してください: http://www.dereuromark.de/2011/08/25/working-with-passwords-in-cakephp

ハッシュの技術的な詳細により、パスワードは片道切符です。

基本的に、パスワード ハッシュをビューに戻すことはありません。常に空のフィールドを表示します (www の他のほとんどすべての Web サイトで見られるように)。

次に、空のフィールドを無視して投稿しました。パスワードフィールドが新しく設定された場合にのみ、実際に検証をトリガーします。

于 2012-07-22T10:53:34.497 に答える
0
<?php echo $this->Form->input('password', array('label' => false,'type'=>'password','required'=>'false')); ?>

出力

 <input name="data[User][password]" type="password" id="UserPassword">

気をつけて!これは編集部分でのみ使用してください

于 2013-12-22T07:06:39.237 に答える
-1
$this->Form->input('password',array('value'=>null));
于 2013-09-27T07:53:45.653 に答える