0

私は Cakephp 2.1 を使用しています。ここでは、パスワードを忘れた場合にユーザーが受け取るリンクを介してユーザーのパスワードを変更しようとしています。

リンクはこんな感じ

../myApp/users/change_password/1

リンクでユーザーIDを渡しています。つまり、上記のように 1 です。

ビュー、つまり change_password.ctp は次のとおりです。

<?php echo $this->Form->create('User', array('controller' => 'users', 'action' => 'change_password', 'class' => 'well')); ?>
<?php echo $this->Form->input('User.id',array('value' => $this->params['pass'][0],'type'=>'hidden')); ?>
<?php echo $this->Form->label('password', 'Password', array('class' => 'control-label')); ?>
<?php echo $this->Form->password('password', array('class' => 'span3', 'type' => 'password')); ?>
<?php echo $this->Form->error('password', null , array('wrap' => 'span', 'class' => 'help-inline')); ?>
<?php echo $this->Form->submit('Change Password', array('class' => 'btn')); ?>
<?php echo $this->Form->end(); ?>

そして、コントローラーは次のとおりです

public function change_password() {
if($this->request->is('post')) {                                   
    if ($this->User->save($this->request->data)) {
        $this->Session->setFlash('Password has been changed.', 'default/flash_success');
        $this->redirect(array('controller' => 'movies', 'action' => 'index'));
        } else {
    $this->Session->setFlash('Password could not be changed.', 'default/flash_error');
    $this->redirect(array('controller' => 'movies', 'action' => 'index'));
    }
}  

}

しかし、パスワードを保存できません。

4

1 に答える 1

0

したがって、URLのユーザーIDを変更するだけで、他のユーザーのパスワードを変更できますか?

/myApp/users/change_password/2 それはまったく安全ではありません。他のアプローチを再検討する必要があります。

ただし、質問に対する答えは次のとおりです。データが検証されていないため、パスワードを変更できない可能性があります。User.phpモデルに検証ルールを設定していますか?はいの場合、ユーザーを保存する前に検証ルールの設定を解除する必要があります。例:unset($this->User->validate['username']);

モデル検証の詳細については、ドキュメントをお読みください

于 2012-09-24T12:40:23.293 に答える