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 回答