1

我有一个用户控制器和用户模型。该模型和关联的数据库表用于身份验证,自然有一个密码字段。

在我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');
?>

如何让用户编辑其帐户(用户名等)的表单,如果留空,则不会更新密码,但如果用户在密码字段中输入新密码,则会更新密码?

4

2 回答 2

2

常见且最安全的方法是使用单独的表单来更改密码,您可以在其中要求用户通过询问旧密码来确认更改。这是因为如果您忘记了在公共计算机上打开的站点,下一个进来的人不能仅仅通过提供新密码来劫持该帐户。

如果您仍想使用原始计划,您可以在保存数据之前取消设置变量(如果它为空):

if( $this->data[ 'User' ][ 'password' ] == '' ) {
    unset( $this->data[ 'User' ][ 'password' ] );
}

另一种选择是将允许的字段作为参数列出,如果该字段为空,则将其save()省略。password

在视图中您可以使用

echo $this->Form->input('password', array( 'value' => '' ) );

以防止散列出现在字段中。

于 2011-08-02T18:40:47.127 回答
0

大多数地方只允许在输入原始密码时编辑密码。它有助于防止未经授权的访问更改密码。

但如果你想这样做,请尝试

echo $this->Form->input('password', array('default'=>false));
于 2011-08-02T18:40:03.153 回答