капча не работает с использованием сценариев в yii2 - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь добавить проверку капчи на основе сценария, для которого я сначала получаю количество неудачных попыток из базы данных.Для которого я использую функцию checkattempts().Основываясь на результате, я показываю капчу в поле зрения и добавляю условие сценария в контроллер, как показано ниже.

В модели LoginForm:

public function rules()
{
    return [
        [['username', 'password'], 'required', 'on'=>'loginpage'],
        [['username', 'password'], 'required', 'on'=>'withCaptcha'],
        [['reference_url'], 'safe'],
        [['verifyCode'], 'captcha', 'skipOnEmpty' => true,'on'=>'withCaptcha'],         
        ['username','email', 'on'=>'loginpage', 'message'=> 'Please enter a valid email address'],
        ['password', 'validatePassword', 'on'=>'loginpage'],
        ['password', 'validatePassword', 'on'=>'withCaptcha'],
    ];
}

 public function checkattempts($uname)
{
    $user = \frontend\models\User::findByEmail($uname);
    $ip = $this->get_client_ip();
    if($user){
    $data = (new Query())->select('*')  
                ->from('login_attempts')
                ->where(['ip' => $ip])->andWhere(['user_ref_id' => $user->id])
                ->one();
    if($data["attempts"] >=3){
        return true;
    }else{
        return false;
    }
    }
    return false;
}

в контроллере SiteController.php

 public function actionLogin() {
    if (!\Yii::$app->user->isGuest) {
        return $this->redirect(Yii::$app->getUrlManager()->getBaseUrl() . '/../../');
    }
    $model = new \common\models\LoginForm();
    $model->scenario = 'loginpage';
    $captcha = false;
    if(Yii::$app->request->post()){
    $post_variables =Yii::$app->request->post('LoginForm');         
        if ($model->checkattempts($post_variables['username'])) {
            $model->scenario = 'withCaptcha'; 
            $captcha = true;
        }
    }
    if ($model->load(Yii::$app->request->post()) && $model->validate()) {
         $model->login(); print_r($model->getErrors()); exit;
    } else {
        return $this->render('login', [
                    'model' => $model, 'captcha' => $captcha,
                ]);
    }

В моем представлении login.php:

 <?php if($captcha) { ?>
            <?= $form->field($model, 'verifyCode')->widget(Captcha::className(), 
        ['template' => '<div class="captcha_img">{image}</div>'
            . '<a class="refreshcaptcha" href="#">'
            . Html::img('/images/imageName.png',[]).'</a>'
            . 'Verification Code{input}',
        ])->label(FALSE); ?>   
            <?php } ?>

В моем контроллере, когда я пытаюсь напечатать ошибки модели в функции $ model-> login (), каждый раз выдается ошибка ниже, даже если проверочный кодправильно.

Array ( [verifycode] => Array ( [0] => The verification code is incorrect. ) )

Почему он каждый раз терпит неудачу.Есть ли какая-либо ошибка в написанном коде?

Заранее спасибо

...