[yii2] Erstellen eines Login-Formulars mit Captcha

Das Hinzufügen eines Captcha zum Anmeldeformular ist ganz einfach und kann in drei Schritten erfolgen:

  1. In models/LoginForm.php müssen Sie Captcha-Felder und Validierungsregeln hinzufügen.
  2. In views/site/login.php müssen Sie ein Captcha-Feld einfügen.
  3. In controllers/SiteController.php müssen Sie die Captcha-Aktion hinzufügen.

In diesem Tutorial möchte ich Ihnen zeigen, wie Sie ein Captcha im Login-Formular erstellen können, aber Sie können ein Captcha zu jedem Formular hinzufügen, indem Sie diesen Schritten folgen.

1. Captcha-Felder und Validierungsregeln zu models/LoginForm.php hinzufügen

Zunächst einmal müssen Sie das Anmeldeformular wie oben beschrieben ändern. Dann müssen Sie eine öffentliche Eigenschaft namens verifyCode und die zugehörigen Validierungsregeln hinzufügen.

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. Widgets zu views/site/login.php hinzufügen

.............
.............
 
<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. Hinzufügen einer Aktion zum Controller/SiteController.php

Damit Captchas funktionieren, müssen Sie eine Action Captcha zu controllers/SiteController.php hinzufügen. Vielleicht existiert die Aktion bereits, weil die Standardvorlage Yii2 sie automatisch hinzufügt.

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

VERWANDTE ARTIKEL

Neueste Artikel