More

    [yii2] Créer un formulaire de connexion avec Captcha

    L’ajout d’un captcha au formulaire de connexion est assez simple et peut se faire en trois étapes :

    1. Dans models/LoginForm.php, vous devez ajouter des champs captcha et des règles de validation.
    2. Dans views/site/login.php vous devez mettre un champ captcha.
    3. Dans controllers/SiteController.php, vous devez ajouter l’action captcha.

    Dans ce tutoriel, je veux vous montrer comment créer un captcha dans le formulaire de connexion, mais vous pouvez ajouter un captcha à n’importe quel formulaire en suivant ces étapes.

    1. Ajouter des champs captcha et des règles de validation à models/LoginForm.php

    Tout d’abord, vous devez modifier le formulaire de connexion comme décrit ci-dessus. Ensuite, vous devez ajouter une propriété publique appelée verifyCode et ses règles de validation.

    class LoginForm extends Model
    {
        .............
        .............
        public $verifyCode;
        .............
      
        public function rules()
        {
            return [
                .............
                .............
      
                ['verifyCode', 'required', 'when'=>function(){return $this->loginFailed;}],
                ['verifyCode', 'captcha', 'when'=>function(){return $this->loginFailed;}],
                  
                .............
                .............
            ];
        }
     
        public function validatePassword($attribute, $params)
        {
            if (!$this->hasErrors()) {
                .............
                if (!$user || !$user->validatePassword($this->password)) {
     
                    Yii::$app->session->set('_loginAttempts', Yii::$app->session->get('_loginAttempts', 0)+1);
     
                    .............
                }
            }
        }   
         
        //Check number login failed
        public function getLoginFailed()
        {
            return Yii::$app->session->get('_loginAttempts', 0) > 3;
        }
         
        .............
        .............   
    }

    2. Ajouter des widgets à views/site/login.php

    .............
    .............
     
    <div class="site-login">
        .............
        .............
     
        <div class="row">
            <div class="col-lg-5">
                <?php $form = ActiveForm::begin(['id' => 'login-form']); ?>
     
                    .............
                    .............
     
                    <?php
                    if($model->loginFailed){
                        echo $form->field($model, 'verifyCode')->widget(\yii\captcha\Captcha::class);
                    }
                    ?>
     
                    .............
                    .............
         
                <?php ActiveForm::end(); ?>
            </div>
        </div>
    </div>

    3. Ajouter une action au contrôleur/SiteController.php

    Pour que les captchas fonctionnent, vous devez ajouter une action captcha à controllers/SiteController.php. Il se peut que l’action existe déjà car le modèle standard de l’application Yii2 l’ajoute automatiquement.

    .............
    .............
      
    class SiteController extends Controller
    {
        .............
        .............
          
        public function actions()
        {
            return [
                .............
                .............
                  
                'captcha' => [
                    'class' => 'yii\captcha\CaptchaAction',
                ],
                .............
                .............
            ];
        }
          
        .............
        .............   
    }

    Dernières articles