2011-08-02 14 views
1

私はユーザコントローラとユーザモデルを持っています。このモデルと関連するデータベーステーブルは認証に使用され、当然パスワードフィールドがあります。CakePHP 1.3でパスワードフィールドを持つフォームを扱う最も良い方法は?

$this->dataと私のeditを呼び出すと、パスワードフィールドにハッシュされたパスワードが私の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'); 
?> 

私は「doesnのユーザーが自分のアカウント(ユーザー名など)を編集するためのフォームを持つことができますどのように空白のままにするとパスワードを更新しますが、ユーザがパスワードフィールドに新しいパスワードを入力した場合はパスワードを更新しますか?

答えて

2

を試してみてください。これは、公開されているコンピュータでサイトを開いたことを忘れた場合、次に来る者は新しいパスワードを与えるだけでアカウントをハイジャックすることができないからです。

それでも当初の計画で行くことにしたい場合は、データを保存する前に空の場合、あなたは変数の設定を解除することができます

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

他の選択肢はsave()にパラメータとして許可されるフィールドをリストして残すことですフィールドが空の場合はpasswordを返します。

ビューでは、フィールドに現れてからハッシュを保つために

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

を使用することができます。

+0

もちろん!ありがとう。パスワードを変更するための別のフォームを表示します。 –

+0

一般に、ユーザー編集フォームはパスワードを処理しません。編集に関連付けられたアクションでは、セーブコールのフィールドキーを使用してパスワードフィールドも許可されません。パスワードフィールドの検証が "required" => true(ユーザーを保存するためにデータ配列内になければならない)に設定されていない限り、フィールドは一般的な編集フォームには表示されません。 –

+0

クリーンなアプローチの動作を使用します。https://github.com/dereuromark/tools/blob/master/models/behaviors/change_password.php – mark

0

ほとんどの場所では、元のパスワードを入力するときにのみパスワードを編集できます。権限のないアクセスによるパスワード変更から保護するのに役立ちます。

しかし、あなたはそれをしたい場合は、共通&最も安全な方法は、古いパスワードを尋ねることによって、あなたが変更を確認するようにユーザーに求めるパスワードを変更するための別のフォームを持つことである

echo $this->Form->input('password', array('default'=>false)); 
+0

フィールドを空のままにすると、データベース内のパスワードが空白になります。 – JJJ

関連する問題