【问题标题】:Reset Password Doesn't Save New Password CakePHP 2.0重置密码不保存新密码 CakePHP 2.0
【发布时间】:2014-12-03 22:05:00
【问题描述】:

我现在已经让系统完成了这个过程,但是由于某种原因,实际更新数据库中密码的代码没有更新任何内容?输入新密码并重新输入密码后,系统立即重定向到登录页面,即使没有显示错误?有什么想法吗?谢谢。

这是我的重置功能

function reset($token=null){
    $this->User->recursive=-1;
    if(!empty($token)){
        $u=$this->User->findBytokenhash($token);
        if($u){
            $this->User->id=$u['User']['id'];
            if($this->request->is('post')){
                $this->User->data=$this->request->data;
                $this->User->data['User']['username']=$u['User']['username'];
                $new_hash=sha1($u['User']['username'].rand(0,100));//created token
                $this->User->data['User']['tokenhash']=$new_hash;
                // print_r($this->request->data);
                //      exit;
                if($this->User->validates(array('fieldList'=>array('password','password_confirm')))){
                    if($this->User->save($this->User->data)){
                        $this->Session->setFlash('Password Has been Updated');
                        $this->redirect(array('controller'=>'users','action'=>'login'));
                    }
                } else{
                    $this->set('errors',$this->User->invalidFields());
                }
            }
        } else {
            $this->Session->setFlash('Token Corrupted,,Please Retry.the reset link work only for once.');
        }
    } else{
        $this->redirect('/');
    }
}

这是我的reset.ctp

<?php echo $this->Form->create('User', array('action' => 'reset')); ?>
<?php
    if(isset($errors)){
        echo '<div class="error">';
        echo "<ul>";
        foreach($errors as $error){
            echo "<li><div class='error-message'>$error</div></li>";
        }
        echo "</ul>";
        echo '</div>';
    }
?>
<form method="post">
    <?php
        echo $this->Form->input('User.password', array('type' => 'password',
                                                       'name' => '$data[User][password]',
                                                       'class' => 'form-control'));
        echo $this->Form->input('User.re_password', array('type' => 'password',
                                                        'name' => 'data[User][re_password]',
                                                        'class' => 'form-control'));
    ?>
    <input type="submit" class="button" style="float:left;margin-left:3px;" value="Save" />
    <?php echo $this->Form->end();?>
</form>

请帮帮我,谢谢

【问题讨论】:

  • 在表单标签中的 ctp 文件上,您不会再次发送令牌,只需从 ctp 中的表单标签中删除操作,然后检查
  • @BharatMaheshwari 是的,我也在使用 Auth
  • 我还看到两个表单标签打开了一个关闭了,删除第二个

标签: php cakephp forgot-password reset-password


【解决方案1】:

用这个替换你的ctp代码

 <?php echo $this->Form->create('User'); ?>
<?php
if(isset($errors)){
    echo '<div class="error">';
    echo "<ul>";
    foreach($errors as $error){
        echo "<li><div class='error-message'>$error</div></li>";
    }
    echo "</ul>";
    echo '</div>';
}
?>
<?php
    echo $this->Form->input('User.password', array('type' => 'password',
                                                   'name' => '$data[User][password]',
                                                   'class' => 'form-control'));
    echo $this->Form->input('User.re_password', array('type' => 'password',
                                                    'name' => 'data[User][re_password]',
                                                    'class' => 'form-control'));
?>
<input type="submit" class="button" style="float:left;margin-left:3px;" value="Save" />
<?php echo $this->Form->end();?>

希望这会奏效。

【讨论】:

  • 检查 $this->data 中的内容。是否获得 $token?
  • 我得到了token的值,但问题是提交新密码时,密码没有保存到数据库中,在数据库中仍然是密码@bharat
  • 除了更新旧行之外,您是否在数据库中检查了插入的新行?您可能在 $this->data 中没有名为“id”的主字段,因此它每次都会插入一个新行
  • 我正在检查我的数据库,我有主字段“id”,我也在检查我的数据库在更新旧数据库时没有自动插入行
【解决方案2】:

我刚刚注意到,

你应该使用$this-&gt;User-&gt;save($this-&gt;request-&gt;data)

使用这个检查

    echo $this->Form->input('User.password', array('type' => 'password',
                                                   'class' => 'form-control'));
    echo $this->Form->input('User.re_password', array('type' => 'password',
                                                    'class' => 'form-control'));

让 cakephp 构建的 name 属性与数据库表、字段相匹配。我认为您只有一两个 ctp 等,您只是从头开始构建项目,对吗?

【讨论】:

  • @dery ,我无权访问您的项目,我正在努力帮助您,您说我很沮丧??
  • 如果你想调试代码,沮丧是行不通的。检查用户模型中是否有 beforeSave() 方法?
  • 嘿,我可以要你的电子邮件吗?我会发送我的项目,我构建这个项目是为了学习,哈哈 yaa 沮丧为什么这个问题没有解决
  • 公共函数 beforeSave($options = array()) { if (!empty($this->data['User']['re_password'])) { $this->data[' User']['password'] = AuthComponent::password($this->data['User']['re_password']); unset($this->data['User']['re_password']); } }
  • 那是我的 beforeSave 用户模型
【解决方案3】:

试试这个:

public function beforeSave() {
    if (isset($this->data['User']['password'])) { 
        $this->data['User']['password'] = AuthComponent::password($this->data['User']['password']);
    }
    return true;
}

并在功能重置

if($this->User->save($this->User->data,false))

它对我有用。希望对你有用!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多