0

管理者権限を持つユーザーが特定のユーザー ID のフォームを開くことができるサイトの管理機能に取り組んでいます。このフォームから、ユーザーの権限を変更したり、ユーザーのパスワードを変更したり、その他の方法で変更したりできます。

ただし、フォームがモデルから構築される場合、パスワード フィールドはデータベースからハッシュ化されたパスワードを取得し、パスワード フィールドに入力します。その結果、管理者がフォームを保存しようとすると、ハッシュ化されたパスワードが平文として扱われるため、再度ハッシュ化されて元のパスワードが上書きされます。

私が必要としているのは、管理者ユーザーがフォームを変更できるようにする方法ですが、パスワードが変更された場合にデータベースでパスワードをハッシュして更新するだけです。

私の考えは、パスワードを空白に設定するフォームを作成することです。

ビュー/ユーザー/編集.ctp:

echo $this->Form->input('User.password',array(
        'value' => '',
        'type' => 'password',
        'autocomplete' => 'off'
    )
);

saveそして、パスワードをスキップするために何らかのチェックを行います。しかし、これは私が立ち往生しているところです。

コントローラー/userscontroller.php

public function edit($id = null) 
{
    $this->User->id = $id;
    if ($this->request->is('get')) 
    {
        $this->request->data = $this->User->read();
    } else  {
        //Something here????
        if ($this->User->save($this->data))
        {
            $this->Session->setFlash('Your user has been updated.');
            $this->redirect(array('action' => 'index'));
        } else 
        {
            $this->Session->setFlash('Unable to update your user.');
        }
    }

    $this->set('groups',$this->User->Group->find('list'));//, array( 'fields' => array('id', 'name'))));
    $this->set('sites',$this->User->Site->find('list'));//, array( 'fields' => array('id', 'name'))));
}

これを確認し、変更がない場合にパスワードが更新されないようにするにはどうすればよいですか?

決定された解決策:

提供された回答に従って、ユーザーが通過するサインアップ検証を再利用する同じページで2番目のフォームを使用しました. サイト/グループの権限を更新すると、ユーザーはあるフォームを介して送信され、パスワードは別のフォームを介して送信されます。

4

2 に答える 2

1

1 つはパーミッションの変更用、もう 1 つはパスワードのみの更新用です。その際、パスワード変更フォームには、変更を検証するための 2 番目のフィールドが必要です。

ユーザー、特にパスワードの管理に役立つ CakePHP プラグインがいくつかあります。

于 2012-11-28T19:21:45.783 に答える
1

私はいつもパスワードを変更するための新しいフォームを特別に作成しています。パスワード フィールドを、パスワードを変更するためのリンクに置き換える必要があります。

または、入力フィールドを無効にして、クリックするボタンを要求し、javascript を使用disabledして入力要素の属性を削除することもできます。

echo $this->Form->input('User.password',array(
        'value' => '',
        'type' => 'password',
        'autocomplete' => 'off',
        'disabled' => true
    )
);

簡単だからJquery

$(function(){
   $('UsersPassword').click(function(){
      $(this).attr('disabled', '0');
   });
});
于 2012-11-28T19:48:00.030 に答える