1

ユーザーコントローラーとユーザーモデルがあります。このモデルと関連するデータベース テーブルは認証に使用され、当然パスワード フィールドがあります。

editが呼び出すときの私のアクション$this->dataでは、ハッシュされたパスワードを私のeditビューのパスワードフィールドに入れます。当然のことながら、保存時に再ハッシュされる 40 文字の値を持つパスワード フィールドは必要ありません。

私のアクションは次のようになります。

function edit($id) {
    $this->User->id = $id;
    if (empty($this->data)) {
        $this->data = $this->User->read();
    }
    else {
        if ($this->User->save($this->data)) {
            $this->Session->setFlash('User has been updated.');
            $this->redirect(array('action' => 'view', $this->User->id));
        }
    }
}

そして、私の見解は次のようになります。

<h2>Edit User</h2>
<?php
    echo $this->Form->create('User', array('action' => 'edit'));
    echo $this->Form->input('username');
    echo $this->Form->input('password');
    echo $this->Form->input('first_name');
    echo $this->Form->input('last_name');
    echo $this->Form->input('email');
    echo $this->Form->end('Save User');
?>

ユーザーが自分のアカウント (ユーザー名など) を編集するためのフォームを作成するにはどうすればよいですか? 空白のままにするとパスワードは更新されませんが、ユーザーが新しいパスワードをパスワード フィールドに入力すると更新されます。

4

2 に答える 2

2

一般的で最も安全な方法は、パスワードを変更するための別のフォームを用意し、ユーザーに古いパスワードを尋ねて変更を確認するように求めることです。これは、公共のコンピューターでサイトを開いていることを忘れた場合、次の人が新しいパスワードを与えるだけでアカウントを乗っ取ることができないためです。

それでも元の計画を使いたい場合は、データを保存する前に、変数が空の場合は設定を解除できます。

if( $this->data[ 'User' ][ 'password' ] == '' ) {
    unset( $this->data[ 'User' ][ 'password' ] );
}

もう 1 つのオプションは、許可されたフィールドをパラメーターとしてリストし、フィールドが空の場合はsave()除外することです。password

使用できるビューで

echo $this->Form->input('password', array( 'value' => '' ) );

ハッシュがフィールドに表示されないようにします。

于 2011-08-02T18:40:47.127 に答える
0

ほとんどの場所では、元のパスワードを入力するときにのみパスワードの編集が許可されます。不正アクセスによるパスワードの変更から保護するのに役立ちます。

でもやりたいならやってみる

echo $this->Form->input('password', array('default'=>false));
于 2011-08-02T18:40:03.153 に答える