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() . 'count'; 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('test1','test2')); $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!