我有一个用户控制器和用户模型。此模型和关联的数据库表用于身份验证,当然还有密码字段。
当我致电edit
时,我的$this->data
操作会将哈希密码放入我的edit
视图中的密码字段中。当然,我不希望密码字段具有40个字符的值,然后在保存时会重新散列。
我的行动如下:
function edit($id) {
$this->User->id = $id;
if (empty($this->data)) {
$this->data = $this->User->read();
}
else {
if ($this->User->save($this->data)) {
$this->Session->setFlash('User has been updated.');
$this->redirect(array('action' => 'view', $this->User->id));
}
}
}
我的观点如下:
<h2>Edit User</h2>
<?php
echo $this->Form->create('User', array('action' => 'edit'));
echo $this->Form->input('username');
echo $this->Form->input('password');
echo $this->Form->input('first_name');
echo $this->Form->input('last_name');
echo $this->Form->input('email');
echo $this->Form->end('Save User');
?>
如果用户在密码字段中输入新密码,如何留空,如果有用户可以编辑不更新密码的帐户(用户名等),但如果用户在密码字段中输入新密码则会更新密码?
答案 0 :(得分:2)
普通&amp;最安全的方法是使用单独的表单来更改密码,您要求用户通过询问旧密码来确认更改。这是因为如果您忘记在公共计算机上打开该网站,那么下一个进来的人不仅可以通过提供新密码来劫持该帐户。
如果您仍想使用原始计划,可以在保存数据之前取消设置该变量:
if( $this->data[ 'User' ][ 'password' ] == '' ) {
unset( $this->data[ 'User' ][ 'password' ] );
}
另一个选项是将允许的字段列为save()
的参数,如果该字段为空,则省略password
。
在视图中,您可以使用
echo $this->Form->input('password', array( 'value' => '' ) );
以防止哈希显示在字段中。
答案 1 :(得分:0)
大多数地方只允许在输入原始密码时编辑密码。它有助于防止未经授权访问的密码更改。
但如果你想这样做,试试
echo $this->Form->input('password', array('default'=>false));