yiisoft / yii-captcha

Yii Framework Captcha widget Extension
https://www.yiiframework.com/
BSD 3-Clause "New" or "Revised" License
18 stars 6 forks source link

Error: Call to a member function generateVerifyCode() on null #15

Open terabytesoftw opened 6 years ago

terabytesoftw commented 6 years ago
Q A
Yii version 3.0
Yii Captcha version 3.0
PHP version 7.1.17
Operating system Centos 7
Error Line CaptchaAction.php:

Line 135 -> $session->set($name, $this->driver->generateVerifyCode());

2018-09-10 16:11:48 [][-][b2114f69c8f19b10eb52dd4ef45e8b10][error][Error] Error: Call to a member function generateVerifyCode() on null in /home/app.example.com/public_html/vendor/yiisoft/yii-captcha/src/CaptchaAction.php:135
Stack trace:
#0 /home/app.example.com/public_html/vendor/yiisoft/yii-captcha/src/CaptchaAction.php(157): yii\captcha\CaptchaAction->getVerifyCode(true)
#1 /home/app.example.com/public_html/vendor/yiisoft/yii-captcha/src/CaptchaValidator.php(60): yii\captcha\CaptchaAction->validate('durayoc', false)
#2 /home/app.example.com/public_html/vendor/yiisoft/yii-core/src/validators/Validator.php(288): yii\captcha\CaptchaValidator->validateValue('durayoc')
#3 /home/app.example.com/public_html/vendor/yiisoft/yii-core/src/validators/Validator.php(274): yii\validators\Validator->validateAttribute(Object(terabytesoft\webapp\forms\ContactForm), 'verifyCode')
#4 /home/app.example.com/public_html/vendor/yiisoft/yii-core/src/base/Model.php(364): yii\validators\Validator->validateAttributes(Object(terabytesoft\webapp\forms\ContactForm), Array)
#5 /home/app.example.com/public_html/vendor/terabytesoft/web-app/src/forms/ContactForm.php(75): yii\base\Model->validate()
#6 /home/app.example.com/public_html/vendor/terabytesoft/web-app/src/controllers/SiteController.php(137): terabytesoft\webapp\forms\ContactForm->contact('admin@example.c...', Object(yii\swiftmailer\Mailer))
#7 /home/app.example.com/public_html/vendor/yiisoft/yii-core/src/base/InlineAction.php(57): terabytesoft\webapp\controllers\SiteController->actionContact()
#8 /home/app.example.com/public_html/vendor/yiisoft/yii-core/src/base/Controller.php(160): yii\base\InlineAction->runWithParams(Array)
#9 /home/app.example.com/public_html/vendor/yiisoft/yii-core/src/base/Module.php(542): yii\base\Controller->runAction('contact', Array)
#10 /home/app.example.com/public_html/vendor/yiisoft/yii-web/src/Application.php(94): yii\base\Module->runAction('site/contact', Array)
#11 /home/app.example.com/public_html/vendor/yiisoft/yii-core/src/base/Application.php(525): yii\web\Application->handleRequest(Object(yii\web\Request))
#12 /home/app.example.com/public_html/public/index.php(11): yii\base\Application->run()
#13 /home/app.example.com/public_html/public/index.php(12): {closure}()
#14 {main}

2018-09-10 16:11:48 [][-][b2114f69c8f19b10eb52dd4ef45e8b10][info][application] $_GET = []

$_POST = [
    '_csrf' => 'SH6DPURm8UrDfzGezPwDgUTVfyti8eGXiXEfdM1-6jQdC9FwHTGpDZMRR_uoj2j7FLQlYQOyldjOGEssuh2Ffw=='
    'ContactForm' => [
        'name' => 'prueba'
        'email' => 'example@email.com'
        'subject' => 'prueba'
        'body' => 'prueba'
        'verifyCode' => 'durayoc'
    ]
    'contact-button' => ''
]

$_FILES = []

$_COOKIE = [
    'PHPSESSID' => 'b2114f69c8f19b10eb52dd4ef45e8b10'
    '_csrf' => 'UuRMYWXGPnvedskzPaZJaCtOGiTXwcoK'
]

$_SESSION = [
    '__flash' => []
    '__captcha/site/captcha' => 'durayoc'
    '__captcha/site/captchacount' => 2
]

$_SERVER = [
    'PATH' => '/bin:/usr/bin'
    'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'
    'HTTP_ACCEPT_ENCODING' => 'gzip, deflate'
    'HTTP_ACCEPT_LANGUAGE' => 'en,gl;q=0.9,und;q=0.8,ru;q=0.7,pt;q=0.6,es;q=0.5'
    'HTTP_CONNECTION' => 'keep-alive'
    'CONTENT_TYPE' => 'application/x-www-form-urlencoded'
    'CONTENT_LENGTH' => '305'
    'HTTP_COOKIE' => 'PHPSESSID=b2114f69c8f19b10eb52dd4ef45e8b10; _csrf=UuRMYWXGPnvedskzPaZJaCtOGiTXwcoK'
    'HTTP_HOST' => 'app.example.com'
    'HTTP_REFERER' => 'http://app.example.com/site/contact'
    'HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
    'HTTP_CACHE_CONTROL' => 'max-age=0'
    'HTTP_ORIGIN' => 'http://app.example.com'
    'HTTP_UPGRADE_INSECURE_REQUESTS' => '1'
    'HTTP_ALEXATOOLBAR_ALX_NS_PH' => 'AlexaToolbar/alx-4.0.3'
    'DOCUMENT_ROOT' => '/home/app.example.com/public_html/public'
    'REMOTE_ADDR' => '999.999.999.999'
    'REMOTE_PORT' => '50479'
    'SERVER_ADDR' => '999.999.999.999'
    'SERVER_NAME' => 'app.example.com'
    'SERVER_PORT' => '80'
    'REQUEST_URI' => '/site/contact'
    'REDIRECT_URL' => '/site/contact'
    'REDIRECT_STATUS' => '200'
    'HAVE_REWITE' => '1'
    'LSWS_EDITION' => 'Openlitespeed 1.4.37'
    'X-LSCACHE' => 'on,crawler'
    'SCRIPT_FILENAME' => '/home/app.example.com/public_html/public/index.php'
    'QUERY_STRING' => ''
    'SCRIPT_NAME' => '/index.php'
    'SERVER_PROTOCOL' => 'HTTP/1.1'
    'SERVER_SOFTWARE' => 'LiteSpeed'
    'REQUEST_METHOD' => 'POST'
    'PHP_SELF' => '/index.php'
    'REQUEST_TIME_FLOAT' => 1536595908.1685
    'REQUEST_TIME' => 1536595908
machour commented 5 years ago

@terabytesoftw how did you configure the Captcha ?

terabytesoftw commented 5 years ago
In the view:

<?php

use yii\bootstrap4\ActiveForm;
use yii\captcha\Captcha;
use yii\helpers\Html;

<?= $form->field($model, 'verifyCode', [
    'labelOptions' => ['id' => 'verifyCode'],
    ])->widget(Captcha::class, [
        'template' => '{input}<div class="text-center">' . '<b>' .
                       $this->app->t('basic', 'Captcha Code') . ':' . '</b>' . '{image}</div>',
        'options' => [
            'class' => 'form-control',
            'oninput' => 'this.setCustomValidity("")',
            'oninvalid' => 'this.setCustomValidity("' . $this->app->t('basic', 'Enter Captcha Code Here') . '")',
            'placeholder' => $this->app->t('basic', 'Captcha Code'),
            'required' => true,
            'style' => 'margin-bottom:10px',
            'tabindex' => '5',
        ],
 ])->label('<b>' . $this->app->t('basic', 'Captcha Code') . '</b>') ?>

In the model:

public function rules()
{
    return [
        // verifyCode needs to be entered correctly
        ['verifyCode', \yii\captcha\CaptchaValidator::class],
    ];
}