0

システムにプロセスを実行させましたが、何らかの理由で、データベース内のパスワードを実際に更新するためのコードは何も更新していませんか? 新しいパスワードを挿入してパスワードを再入力すると、システムはすぐにログイン ページにリダイレクトされます。エラーは表示されませんか? 何かご意見は?ありがとう。

これが私のリセット機能です

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>

助けてください、ありがとう

4

3 に答える 3

0

これで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();?>

これがうまくいくことを願っています。

于 2014-10-09T05:17:41.670 に答える