ユーザーがパスワードを変更できるページを作成しています。それらは2つのフィールドに入力する必要があり、変更される前に両方が一致する必要があります。その後、成功するとプロファイルページにリダイレクトされます。
これまでのところ、次のメソッドを作成しました。
public function changePassword()
{
$user = $this->User->find('first', array(
'conditions' => array(
'User.id' => $this->Auth->user('id'))
));
if ($this->request->is('post') || $this->request->is('put'))
{
if ($this->User->save($this->request->data))
{
$this->User->saveField('password', AuthComponent::password($this->request->data['User']['password2']));
$this->Session->setFlash(__('Your password has been changed!'));
$this->redirect(array('controller'=>'profiles','action'=>'view','userName'=>$user['User']['username']));
}
else
{
$this->Session->setFlash(__('Whoops! Something went wrong... try again?'));
}
}
}
これは次の形式です。
<?php echo $this->Form->create(); ?>
<?php echo $this->Form->input('id',array('type'=>'hidden')); ?>
<?php echo $this->Form->input('password1',array('type'=>'text','label'=>array('text'=>'Enter your new password'))); ?>
<?php echo $this->Form->input('password2',array('type'=>'text','label'=>array('text'=>'Confirm your new password'))); ?>
<button type="submit">Save</button>
<?php echo $this->Form->end(); ?>
ご覧のとおり、計画はpassword2に記載されている内容を取得し、セキュリティハッシュを使用してデータベースのパスワードフィールドに保存することです。しかし、何が起こるかというと、代わりに新しいユーザーが作成されますが、データは空白になります...ここで何が間違っているのでしょうか。そして、2つのパスワードフィールドを比較するにはどうすればよいですか...