我正在为我的网站开发一些管理功能,其中具有管理员权限的用户可以打开给定用户ID的表单。从这个表单中,他们可以更改用户权限,更改用户密码或其他方式。
但是,从模型构造表单时,密码字段会从数据库中提取哈希密码并填充密码字段。因此,当管理员保存表单时,哈希密码被视为明文,因此再次进行哈希处理,覆盖原始密码。
我需要的是允许管理员用户更改表单的方法,但只有在数据库被更改的情况下才对数据库进行哈希处理和更新。
我的想法是将表单设置密码构造为空白:
查看/用户/ edit.ctp:
echo $this->Form->input('User.password',array(
'value' => '',
'type' => 'password',
'autocomplete' => 'off'
)
);
对save
进行某种检查以跳过密码;但这就是我被困住的地方。
控制器/ userscontroller.php
public function edit($id = null)
{
$this->User->id = $id;
if ($this->request->is('get'))
{
$this->request->data = $this->User->read();
} else {
//Something here????
if ($this->User->save($this->data))
{
$this->Session->setFlash('Your user has been updated.');
$this->redirect(array('action' => 'index'));
} else
{
$this->Session->setFlash('Unable to update your user.');
}
}
$this->set('groups',$this->User->Group->find('list'));//, array( 'fields' => array('id', 'name'))));
$this->set('sites',$this->User->Site->find('list'));//, array( 'fields' => array('id', 'name'))));
}
如何检查并防止密码在没有变化时更新?
决定解决方案:
根据提供的答案,我在同一页面上使用了第二种形式,重新使用用户经历的注册验证。更新站点/组权限时,用户通过一个表单发送,而密码通过另一个表单发送。
答案 0 :(得分:1)
我会构建两个管理表单,一个用于更改权限,另一个用于更新密码。当您使用它时,更改密码表单应该有第二个字段用于验证更改。
有一些CakePHP插件可以帮助管理用户,特别是密码。
答案 1 :(得分:1)
我总是创建一个专门用于更改密码的新表单。您应该使用链接替换密码字段以更改密码。
或者,你可以禁用输入字段并需要一个按钮来点击并使用javascript删除输入元素上的disabled
属性
echo $this->Form->input('User.password',array(
'value' => '',
'type' => 'password',
'autocomplete' => 'off',
'disabled' => true
)
);
Jquery,因为它很容易
$(function(){
$('UsersPassword').click(function(){
$(this).attr('disabled', '0');
});
});