Maison >cadre php >YII >yii génère une erreur lors de la saisie du code de vérification correct

yii génère une erreur lors de la saisie du code de vérification correct

王林
王林original
2019-12-24 13:43:471660parcourir

yii génère une erreur lors de la saisie du code de vérification correct

Lorsque j'ai fait une demande, j'ai constaté que j'avais entré le bon code de vérification, mais il m'a été demandé que le code de vérification était erroné.

La dernière trace du code a révélé que si le modèle est validé séparément avant l'enregistrement, le code de vérification sera régénéré une fois la vérification terminée. Ensuite, lorsque nous Model save, nous effectuerons également une vérification de validation. Lors de la vérification, le code de vérification a été régénéré, il ne correspondra donc pas.

Découverte du problème :

Nous pouvons chercher framework/web/widgets/captcha/CCaptchaAction.php pour trouver facilement le problème.

<?php
class CaptchaAction extends CCaptchaAction{
    public function validate($input, $caseSensitive)
    {
        $code = $this->getVerifyCode();
        $valid = $caseSensitive ? ($input === $code) : !strcasecmp($input, $code);
        $session = Yii::app()->session;
        $session->open();
        $name = $this->getSessionKey() . &#39;count&#39;;        
        if (!Yii::app()->request->isAjaxRequest) {
            $session[$name] = $session[$name] + 1;
        }        
        // 这里会重新生成
        if ($session[$name] > $this->testLimit && $this->testLimit > 0) {
                    $this->getVerifyCode(true);
        }
                return $valid;
    }
}
// 如果这里用到了验证码,就会出问题$model = new Test();

$model->validate();

$model->save();
// 这样是正确的$model = new  Test();
// 把需要验证的 attribute 放进去,排除验证码字段
$model->validate(array(&#39;test1&#39;,&#39;test2&#39;));
$model->save()

Articles et tutoriels connexes recommandés : tutoriel yii

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn