Yii2 captcha error

Доброго времени суток! Намучался с капчёй, не знаю что и делать! Каждый раз, когда отправляю форму, выдаёт ошибку капча не верная. Заглянул в сессию, и увидел, что капча, хранящаяся там уже другая.

Доброго времени суток! Намучался с капчёй, не знаю что и делать! Каждый раз, когда отправляю форму, выдаёт ошибку капча не верная. Заглянул в сессию, и увидел, что капча, хранящаяся там уже другая.

Одна надежда на Вас! Заранее благодарен)

Контроллер:

Код: Выделить всё

public function actions()
    {
        return [
            'error' => [
                'class' => 'yiiwebErrorAction',
            ],
            'captcha' => [
                'class' => 'yiicaptchaCaptchaAction',
                'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,


            ],
        ];
    }
    
     public function actionContact()
    {
        $feedBack = new Feedback();
        if ($feedBack->load(Yii::$app->request->post())) {

            if(!$feedBack->validate())
            {
                return $this->render('error');;
            }

            if (!$feedBack->save()) {

                return $this->render('error');
            } else {
                $feedBack->contact(Yii::$app->params['emailto']);
                return $this->goHome();
            }
        }
        $content = Page::find()->where('page_id = 6')->one();

        return $this->render('contact', [
            'feedBack' => $feedBack,
            'content' => $content
        ]);
    }
  

Модель:

Код: Выделить всё

class Feedback extends yiidbActiveRecord
{

    public $verifyCode;
    public static function tableName()
    {
        return 'feedback'; // TODO: Change the autogenerated stub
    }

    public function rules()
    {
        return [
            // login and password are both required

            [['feedback_name'], 'string', 'min' => 8, 'max' => 60],
            [['feedback_email'], 'email'],
            [['feedback_phone'],  'match', 'pattern' => '/^([+]{0,1})-{0,}[0-9 ]{6,30}/'],
            [['feedback_text'], 'string', 'min' => 10, 'max' => 1000],

            [['feedback_name', 'feedback_email', 'feedback_phone', 'feedback_text'], 'required'],

//            ['verifyCode', 'string'],
            ['verifyCode',  'captcha']

        ];
    }

    /* Определяем названия полей */
    public function attributeLabels()
    {
        return [
            'verifyCode' => 'Подтвердите код',
            'feedback_name' => 'Имя',
            'feedback_email' => 'Электронный адрес',
            'feedback_phone' => 'Номер телефона',
            'feedback_text' => 'Сообщение',
        ];
    }
    
     public function contact($emailto)
    {
        if(Yii::$app->mailer->compose()
            ->setFrom(Yii::$app->params['adminEmail']) /* от кого */
            ->setTo($this->feedback_email) /* куда */
            ->setSubject('Админ') /* имя отправителя */
            ->setTextBody('Добрый день! Ваше сообщение принято!')->setCharset('UTF-8') /* текст сообщения */
            ->send() /* функция отправки письма */
        ){
            return true;
        } else {
            return false;
        }
    }
    

Ошибка с капчей в контактной форме-как исправить?

07.10.2018, 15:05. Показов 2218. Ответов 3


Использую шаблон basik в Yii2 для интернет-магазина. В cart/view уже настроена отправка почты при заказе товара, все работает, письма доходят, но нужно ещё сделать отправку сообщений в ссылке ‘Контакты» , и здесь ошибки(

Error Exception (Invalid Configuration) ‘yiibaseInvalidConfigException’ with message ‘Invalid CAPTCHA action ID: index/captcha’

in D:sitesyii2.locvendoryiisoftyii2captchaCapt chaValidator.php:81

PHP
1
throw new InvalidConfigException('Invalid CAPTCHA action ID: ' . $this->captchaAction);

Stack trace:
#0 D:sitesyii2.locvendoryiisoftyii2captchaCapt chaValidator.php(100): yiicaptchaCaptchaValidator->createCaptchaAction()
#1 D:sitesyii2.locvendoryiisoftyii2captchaCapt chaValidator.php(90): yiicaptchaCaptchaValidator->getClientOptions(Object(appmodelsContactForm) , ‘verifyCode’)
#2 D:sitesyii2.locvendoryiisoftyii2widgetsActi veField.php(819): yiicaptchaCaptchaValidator->clientValidateAttribute(Object(appmodelsContact Form), ‘verifyCode’, Object(yiiwebView))
#3 D:sitesyii2.locvendoryiisoftyii2widgetsActi veField.php(230): yiiwidgetsActiveField->getClientOptions()
#4 D:sitesyii2.locvendoryiisoftyii2widgetsActi veField.php(220): yiiwidgetsActiveField->begin()
#5 D:sitesyii2.locvendoryiisoftyii2-bootstrapsrcActiveField.php(187): yiiwidgetsActiveField->render(‘
public static function convertExceptionToError($exception)
{
trigger_error(static::convertExceptionToString($ex ception), E_USER_ERROR);
}

in D:sitesyii2.locviewsindexcontact.php at line 45 – yiiwidgetsActiveField::__toString()
стр. 45 ‘captchaAction’ => ‘/index/captcha’,

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- Поля формы и капча -->
            <?= $form->field($model, 'name') ?>
            <?= $form->field($model, 'email') ?>
            <?= $form->field($model, 'subject') ?>
       
            <?= $form->field($model, 'body')->textArea(['rows' => 6]) ?>
            <?=$form->field($model, 'verifyCode')->widget(Captcha::className(), [
                'captchaAction' => '/index/captcha',
                'template' => '<div class="row"><div class="col-lg-4">{image}</div><div class="col-lg-7">{input}</div></div>',
            ])?>
            <!-- Кнопка отправки формы-->
            <div class="form-group">
                <?= Html::submitButton('Отправить сообщение', ['class' => 'btn btn-default waves-effect btn-color-orange btn-color-orange-long', 'name' => 'contact-button']) ?>
            </div>

in D:sitesyii2.locvendoryiisoftyii2baseView.ph p at line 336 – require(‘D:sitesyii2.locviewsindexcontact.php ‘)
стр. 336 require $file_;

in D:sitesyii2.locvendoryiisoftyii2baseView.ph p at line 254 – yiibaseView::renderPhpFile(‘D:sitesyii2.locvi ewsindexco…’, [‘model’ => appmodelsContactForm])
стр 254 $output renderer-> render ($ this, $ viewFile, $ params);

in D:sitesyii2.locvendoryiisoftyii2baseControl ler.php at line 384 – yiibaseView::render(‘contact’, [‘model’ => appmodelsContactForm], appcontrollersIndexController)

PHP
1
$ content = $ this-> getView () -> render ($ view, $ params, $ this);         return $ this-> renderContent ($ content);

in D:sitesyii2.loccontrollersIndexController.php at line 37 – yiibaseController::render(‘contact’, [‘model’ => appmodelsContactForm])

PHP
1
return $ this-> render ('контакт', [                'model' => $ model,          ]);

SiteController

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<spoiler title=""><?php
 
namespace appcontrollers;
 
use Yii;
use yiifiltersAccessControl;
use yiiwebController;
use yiifiltersVerbFilter;
use appmodelsLoginForm;
use appmodelsContactForm;
 
class SiteController extends Controller
{
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['logout'],
                'rules' => [
                    [
                        'actions' => ['logout'],
                        'actions' => ['captcha','index'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'logout' => ['post','get'],
                ],
            ],
        ];
    }
 
    public function actions()
    {
        return [
            'error' => [
                'class' => 'yiiwebErrorAction',
            ],
            'captcha' => [
                'class' => 'yiicaptchaCaptchaAction',
                'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
            ],
        ];
    }
 
   /* public function actionIndex()
    {
        return $this->render('index');
    }*/
 public function actionIndex()
    {
        $model = new ContactForm();
        if ($model->load(Yii::$app->request->post()) && $model->contact(setting::ADMIN_EMAIL_ADDRESS)) {
            Yii::$app->session->setFlash('contactFormSubmitted');
 
            return $this->refresh();
        } else {
            return $this->render('index', [
                'model' => $model,
            ]);
        }
    }
 
 
 
    public function actionLogin()
    {
        if (!Yii::$app->user->isGuest) {
            return $this->goHome();
        }
 
        $model = new LoginForm();
        if ($model->load(Yii::$app->request->post()) && $model->login()) {
            return $this->goBack();
        }
        return $this->render('login', [
            'model' => $model,
        ]);
    }
 
    public function actionLogout()
    {
        Yii::$app->user->logout();
 
        return $this->goHome();
    }
/*
    public function actionContact()
    {
        $model = new ContactForm();
        if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app->params['adminEmail'])) {
            Yii::$app->session->setFlash('contactFormSubmitted');
 
            return $this->refresh();
        }
        return $this->render('contact', [
            'model' => $model,
        ]);
    }
*/
    public function actionAbout()
    {
        return $this->render('about');
    }
}     </spoiler>

IndexController

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<spoiler title="">
<?php
 
 
namespace appcontrollers;
 
use Yii;
use yiiAppController;
use appmodelsContactForm;
use yiiwebRequest;
 
 
 
class IndexController extends AppController
{
 
    public function actionContact()
    {
        
        //$this->layout = 'contact';
        $this->layout = false;
        
 
          /* Создаем экземпляр класса */
        $model = new ContactForm();
        /* получаем данные из формы и запускаем функцию отправки contact, если все хорошо, выводим сообщение об удачной отправке сообщения на почту */
        if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app->params['adminEmail'])) {
            Yii::$app->session->setFlash('contactFormSubmitted');
            return $this->refresh();
        /* иначе выводим форму обратной связи */
        } else {
           return $this->render('contact', [
               'model' => $model,
         ]);
           /*  return $this->render('contact', compact('contact'));*/
        }
    }
}
 
   /*  public function actionView(){
       
       
        // выводим title E-SHOPPER и прицепляем название категории
        /* $this->setMeta('E-SHOPPER | ' . $category->name, $category->keywords, $category->description);
 
        // рендерим category/view и передаем в него найденные продукты
        return $this->render('index', compact('contact'));
    }
}
*/</spoiler>

Model ContactForm.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<spoiler title="">
<?php
 
namespace appmodels;
 
use Yii;
use yiibaseModel;
 
/**
 * ContactForm is the model behind the contact form.
 */
class ContactForm extends Model
{
    public $name;
    public $email;
    public $subject;
    public $body;
    public $verifyCode;
 
    /**
     * @return array the validation rules.
     */
    public function rules()
    {
        return [
        /*[/*
            // name, email, subject and body are required
            [['name', 'email', 'subject', 'body'], 'required'],
            // email has to be a valid email address
            ['email', 'email'],
            // verifyCode needs to be entered correctly
            ['verifyCode', 'captcha'],
        ];*/
           /* Поля обязательные для заполнения */
            [ ['name', 'email', 'subject', 'body'], 'required'],
            /* Поле электронной почты */
            ['email', 'email'],
            /* Капча */
            ['verifyCode', 'captcha', 'captchaAction'=>'index/captcha'],
          /*  ['verifyCode', 'captcha','captchaAction'=>'/contactus/default/captcha'],*/
 
        ];
 
    }
 
    /**
     * @return array customized attribute labels
     */
    public function attributeLabels()
    {
        return [
            'verifyCode' => 'Подтвердите код',
            'name' => 'Имя',
            'email' => 'Электронный адрес',
            'subject' => 'Тема',
            'body' => 'Сообщение',
        ];
    }
 
    /**
     * Sends an email to the specified email address using the information collected by this model.
     * @param  string  $email the target email address
     * @return boolean whether the model passes validation
     */
    /*public function contact($email)
    {
        if ($this->validate()) {
            Yii::$app->mailer->compose()
                ->setTo($email)
                ->setFrom([$this->email => $this->name])
                ->setSubject($this->subject)
                ->setTextBody($this->body)
                ->send();
 
            return true;
        }
        return false;
    }*/
 
       /* функция отправки письма на почту */
    public function contact($emailto)
    {
        /* Проверяем форму на валидацию */
        if ($this->validate()) {    
            Yii::$app->mailer->compose() 
                ->setFrom([$this->email => $this->name]) /* от кого */
                ->setTo($emailto) /* куда */
                ->setSubject($this->subject) /* имя отправителя */
                ->setTextBody($this->body) /* текст сообщения */
                ->send(); /* функция отправки письма */
 
            return true;
        } else {
            return false;
        }
    }
}</spoiler>

Вид папка index/ contact.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<spoiler title="">
<?php
use yiihelpersHtml;
use yiibootstrapActiveForm;
use yiicaptchaCaptcha;
 
 
 
/* @var $this yiiwebView */
/* @var $form yiibootstrapActiveForm */
/* @var $model appmodelsContactForm */
 
$this->title = 'Контакты';
?>
<article class="col-xs-12 col-lg-6">
 
    <div class="row margin-null">
        <!-- Заголовок -->
        <h1><?= Html::encode($this->title) ?></h1>
    
        <!-- Условие отправления формы, если она отправлена выводим сообщение -->
        <?php if (Yii::$app->session->hasFlash('contactFormSubmitted')): ?>
    
        <div class="alert alert-success">
            Спасибо за обращение к нам. Мы постараемся ответить вам как можно скорее.
        </div>
    
        // иначе выводим форму
        <?php else: ?>
    
           <?php $form = ActiveForm::begin([
                'id' => 'contact-form', /* Идентификатор формы */
                'options' => ['class' => 'form-horizontal'], /* класс формы */
                'fieldConfig' => [ /* классы полей формы */
                    'template' => "<div class="col-lg-3">{label}</div>n<div class="col-lg-9">{input}</div>n<div class="col-lg-12 col-lg-offset-3 ">{error}</div>"
               
                ],
            ]); ?>
            <!-- Поля формы и капча -->
            <?= $form->field($model, 'name') ?>
            <?= $form->field($model, 'email') ?>
            <?= $form->field($model, 'subject') ?>
       
            <?= $form->field($model, 'body')->textArea(['rows' => 6]) ?>
            <?=$form->field($model, 'verifyCode')->widget(Captcha::className(), [
                'captchaAction' => '/index/captcha',
                'template' => '<div class="row"><div class="col-lg-4">{image}</div><div class="col-lg-7">{input}</div></div>',
            ])?>
            <!-- Кнопка отправки формы-->
            <div class="form-group">
                <?= Html::submitButton('Отправить сообщение', ['class' => 'btn btn-default waves-effect btn-color-orange btn-color-orange-long', 'name' => 'contact-button']) ?>
            </div>
            
            <?php ActiveForm::end(); ?>
    
        <?php endif; ?>
    
    </div>
</article></spoiler>

config/web

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<spoiler title="">
 
<?php
 
$params = require(__DIR__ . '/params.php');
 
$config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'language' => 'ru-RU',
    // контроллер по умолчанию вместо site/index для польз.части
    'defaultRoute' => 'category/index',
    'modules' => [
        'admin' => [
            'class' => 'appmodulesadminModule',
            'layout' => 'admin',
            'defaultRoute' => 'order/index',
        ],
         'yii2images' => [
            'class' => 'ricoyii2imagesModule',
            //be sure, that permissions ok
            //if you cant avoid permission errors you have to create "images" folder in web root manually and set 777 permissions
            'imagesStorePath' => 'upload/store', //path to origin images
            'imagesCachePath' => 'upload/cache', //path to resized copies
            'graphicsLibrary' => 'GD', //but really its better to use 'Imagick'
            'placeHolderPath' => '@webroot/upload/store/no-image.png', // if you want to get placeholder when image not exists, string will be processed by Yii::getAlias
        ],
    ],
    'components' => [
        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => '6H8SRuk9HIPbdCxI7C0lt16sl9rA1luC',
            'baseUrl'=>'',
        ],
        'cache' => [
            'class' => 'yiicachingFileCache',
        ],
        'user' => [
            'identityClass' => 'appmodelsUser',//если свой класс user, то здесь переименовать
            'enableAutoLogin' => true, //авторизация польз.на основе куки
// куда будет перенапр.польз.если неавтор.      
   //'loginUrl' => 'cart/view'
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
        'mailer' => [
         'class' => 'yiiswiftmailerMailer',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
            'useFileTransport' => false, //если false то письма будут отпр. если true то в папке runtime 
            'transport'=>[
                'class' => 'Swift_SmtpTransport',     
                'host' => ('smtp.mail.ru'),
                'port' => ('465'), // для mail.ru
                'encryption' => ('ssl'), // tls
                'username' => ('medeyacom'),
                'password' => ('bitrix111'),
            ],
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yiilogFileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'db' => require(__DIR__ . '/db.php'),
        
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
            // более конкретные правила должны нах.впереди более общих
            // page и номер стр.
              'category/<id:d+>/page/<page:d+>' => 'category/view',
            //ссылка соотв. контр.cat и экшену view
                 'category/<id:d+>' => 'category/view',
                 //для ссылки карточки товаров
                 'product/<id:d+>' => 'product/view',
                 'search/<id:d+>' => 'category/search',
           ],
        ],
        
    ],
    'controllerMap' => [
        'elfinder' => [
            'class' => 'mihaildevelfinderPathController',
            'access' => ['@'], //доступ к редактору только для авт.польз.
            'root' => [
                'baseUrl'=>'/web',//папка web upload добавляет сам.
//                'basePath'=>'@webroot',
                'path' => 'upload/global',//куда загружается файл
                'name' => 'Global'//название папки для загрузки в редакторе
                // на хост.дать права на запись
            ],
        ]
    ],
    'params' => $params,
];
 
if (YII_ENV_DEV) {
    // configuration adjustments for 'dev' environment
    $config['bootstrap'][] = 'debug';
    $config['modules']['debug'] = [
        'class' => 'yiidebugModule',
    ];
 
    $config['bootstrap'][] = 'gii';
    $config['modules']['gii'] = [
        'class' => 'yiigiiModule',
    ];
}
 
return $config;</spoiler>

Params.php

PHP
1
2
3
4
5
6
<?php
 
return [
    'adminEmail' => 'здесь email',
     'emailto'  => 'здесь email',
];

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Добавляем капчу на форму. Настройка Captcha.

В Yii для работы с капчей уже имеется несколько специальных классов. Поэтому можно использовать действие captcha, которое указывает на класс yiicaptchaCaptchaAction, подключив его в контроллере

class SiteController extends Controller
{
    // ...
    public function actions()
    {
        return [
            // ...
            'captcha' => [
                'class' => 'yiicaptchaCaptchaAction',
                'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
            ],
        ];
    }
    // ...
}

Теперь по url site/captcha у нас будет работать класс yiicaptchaCaptchaAction. fixedVerifyCode устанавливает код капчи для тестового режима работы.

Затем в модели формы добавляем публичное свойство для хранения значения из поля ввода кода капчи пользователем, и правило валидации этого поля

class ContactForm extends Model{
    // ...
    public $verifyCode;
    // ...
    public function rules()
    {
        return [
            // ...
            ['verifyCode', 'captcha'],
        ];
    }
    // ...
}

И в виде формы добавляем само это поле для кода проверки

<?php $form = ActiveForm::begin(['id' => 'contact-form']); ?>
    // ...
    <?= $form->field($model, 'verifyCode')->widget(Captcha::className()) ?>
    // ...
<?php ActiveForm::end(); ?>

Следует заметить, что сегодня есть роботы, распознающие текст с картинок, и поэтому стоит улучшить защиту. Если делать сложнее и запутаннее картинку с кодом, то это не понравится пользователям, которые будут сами ошибаться при вводе символов и цифр и им будет сложно распознавать изображение.

Хорошим выходом может быть простая математическая задача, которую решит реальный человек. Для этого есть удобное расширение hreitsma/yii2-simplemath-captcha

  • Главная
  • Блог
  • Добавляем капчу на форму. Настройка Captcha.

Я использую стандартную реализацию капчи расширенного фреймворка yii2. У меня проблема: я хочу менять свой код с картинки каждый раз, когда обновляю страницу, но когда я обновляю страницу, мой код с картинки не меняется.

3

Решение

Наиболее правильным решением будет создать свой собственный CaptchaAction, что расширяет yiicaptchaCaptchaAction и переопределить run() метод следующим образом:

namespace appactions; // Change to your own

class CaptchaAction extends yiicaptchaCaptchaAction {
public $autoRegenerate = true;

public function run()
{
if ($this->autoRegenerate && Yii::$app->request->getQueryParam(self::REFRESH_GET_VAR) === null) {
$this->setHttpHeaders();
Yii::$app->response->format = Response::FORMAT_RAW;
return $this->renderImage($this->getVerifyCode(true));
}
return parent::run();
}
}

2

Другие решения

потому что вы установили YII_ENV на TEST, как это defined('YII_ENV') or define('YII_ENV', 'test'); измените это на defined('YII_ENV') or define('YII_ENV', 'prod');

1

попробуй это

<script>

window.onload = hello;

function hello()
{
document.getElementById('loginform-captcha-image').click();
}

</script>

1

Я нашел грязный способ обойти это — просто вызвать click событие, когда страница загружается. Добавьте этот код в самом конце вашего view файл, после окончания формы;

$js = <<<JS
$('#loginform-captcha-image').trigger('click');
JS;
$this->registerJs($js, $this::POS_READY);

Это не очень красиво, но это работает, и я нашел единственный способ справиться с этой проблемой, которая также преследует мои собственные сайты.

0

В вашем контроллере просто unset сеанс капчи:

 session_start();
unset($_SESSION["__captcha/panel/panel-auth/captcha"]);
unset($_SESSION["__captcha/panel/panel-auth/captchacount"]);

0

Обновите свой CaptchaAction как

public function actions()
{
return [
'error' => [
'class' => 'yiiwebErrorAction',
],
'captcha' => [
'class' => 'yiicaptchaCaptchaAction',
'fixedVerifyCode' => null,
],
];
}

Читать Исправлен код проверки

ЕСЛИ fixedVerifyCode если установлено, то капча совпадает со значением, установленным в fixedVerifyCode

// code from yiicaptchaCaptchaAction in Yii2

public function getVerifyCode($regenerate = false)
{
if ($this->fixedVerifyCode !== null) {
return $this->fixedVerifyCode;
}

$session = Yii::$app->getSession();
$session->open();
$name = $this->getSessionKey();
if ($session[$name] === null || $regenerate) {
$session[$name] = $this->generateVerifyCode();
$session[$name . 'count'] = 1;
}

return $session[$name];
}

-1

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Yii2 activerecord save error
  • Yii2 activeform error options
  • Yii2 500 internal server error
  • Yii2 404 error
  • Yii log error

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии