【问题标题】:Best way to handle a form with password field in CakePHP 1.3?在 CakePHP 1.3 中处理带有密码字段的表单的最佳方法是什么?
【发布时间】:2011-10-18 12:09:01
【问题描述】:

我有一个用户控制器和用户模型。这个模型和关联的数据库表是用来认证的,自然有密码字段。

在我调用$this->data 时的edit 操作中,将散列密码放在我的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');
?>

我怎样才能有一个表单让用户编辑他们的帐户(用户名等),如果留空则不会更新密码,但如果用户在密码字段中输入新密码会更新它?

【问题讨论】:

    标签: cakephp cakephp-1.3 cakephp-model


    【解决方案1】:

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

    如果你还想继续原来的计划,你可以在保存数据之前取消设置变量,如果它是空的:

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

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

    在视图中你可以使用

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

    防止散列出现在字段中。

    【讨论】:

    • 当然!谢谢。我将在单独的表格中更改密码。
    • 通常用户编辑表单不会处理密码,并且与编辑相关的操作甚至不允许通过保存调用中的字段键输入密码字段。只要密码字段的验证未设置为“必需”=> true(意思是,必须在数据数组中以保存用户)并且该字段只是从一般编辑表单中丢失,您就可以了。
    【解决方案2】:

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

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

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

    【讨论】:

    • 当字段为空时,仅这样做会使数据库中的密码为空。
    猜你喜欢
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多