我正在使用cakephp 2.1,我正在尝试通过用户在忘记密码请求时收到的链接来更改用户的密码。
链接看起来像这样
../对myApp /用户/ change_password / 1
我在链接中传递了用户ID。即,如上所述。
视图,即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'));
}
}
}
但我无法保存密码。
答案 0 :(得分:0)
因此,如果我只更改网址中的用户ID,我可以更改其他用户的密码吗?
/myApp/users/change_password/2
这根本不安全。你应该重新考虑另一种方法。
但是,您的问题的答案是:
您可能无法更改密码,因为数据未经过验证。
您是否在User.php模型中有设置验证规则?如果是,则必须在保存用户之前取消设置验证规则。
示例:unset($this->User->validate['username']);
有关模型验证的更多信息,请阅读documentation