0

こんにちは、データベースで認証していますが、電子メールアドレスの形式が正しくない場合、同じページがユーザーに返され、ページにエラーが表示されるという問題があります。問題は、パスワードがまだハッシュされ、返されたフォームに追加されることです。

私のコントローラ::actionRegister():

$model = new User('register');
        if (isset($_POST['User']))
        {
            $model->attributes = $_POST['User'];
            $model->password = crypt($model->password, $model->blowfishSalt());
            if ($model->save())
            {
                $this->redirect(Yii::app()->user->returnUrl);
            }
        }   
        $this->render('register', array('model'=>$model));

私の見解: register.php

<div class="row">
        <?php echo $form->labelEx($model,'email'); ?>
        <?php echo $form->textField($model,'email'); ?>
        <?php echo $form->error($model,'email'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'password'); ?>
        <?php echo $form->passwordField($model,'password'); ?>
        <?php echo $form->error($model,'password'); ?>
    </div>


    <div class="row buttons">
        <?php echo CHtml::submitButton('Submit'); ?>
    </div>

「登録」シナリオを使用してパスワードがフォームに返されないこと、および/または他のすべてのエラーが解消されるまでパスワードがハッシュされないことを確認するにはどうすればよいですか。ハッシュには時間がかかるので?

4

2 に答える 2

0

lysenkobv のコメントは正しいか、コードを次のように変更し、検証を使用して、検証後までパスワードを変更しないでください。

if (isset($_POST['User']))
    {
        $model->attributes = $_POST['User'];
        if ($model->validate())
        {
            $model->password = crypt($model->password, $model->blowfishSalt());
            $model->save();
            $this->redirect(Yii::app()->user->returnUrl);
        } else {
            //if you want password to clear so they have to retype it
            $model->password = null;
        }
    }   
于 2013-10-07T19:30:21.830 に答える