L’ajout d’un captcha au formulaire de connexion est assez simple et peut se faire en trois étapes :
- Dans models/LoginForm.php, vous devez ajouter des champs captcha et des règles de validation.
- Dans views/site/login.php vous devez mettre un champ captcha.
- 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>
Autres articles intéressants
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', ], ............. ............. ]; } ............. ............. }