Home > PHP Framework > YII > yii prompts an error when entering the correct verification code

yii prompts an error when entering the correct verification code

王林
Release: 2019-12-24 13:44:52
Original
1654 people have browsed it

yii prompts an error when entering the correct verification code

When making a request, I found that the correct verification code was entered, but the verification code error was prompted.

Finally, following the code, we found that if the Model is validated separately before saving, the verification code will be regenerated after the verification is completed. Then when we Model save, we will also perform validate verification. During verification, the verification code has been regenerated, so it will not match.

Problem discovery:

We can look at framework/web/widgets/captcha/CCaptchaAction.php and we can easily find the problem.

<?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;
    }
}
Copy after login
// 如果这里用到了验证码,就会出问题$model = new Test();

$model->validate();

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

Recommended related articles and tutorials: yii tutorial

The above is the detailed content of yii prompts an error when entering the correct verification code. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template