Ошибка: RecaptchaField::validate(): Ошибка службы Recaptcha: 'invalid-request-cookie'

Я получаю следующее сообщение об ошибке после настройки проверки спама ReCaptcha. ReCaptcha работает правильно, я просто обеспокоен ошибками.

Использование модулей Silverstripe версии 2.4.5: - защита от спама - recaptcha

Error: RecatpchaField::validate(): Recaptcha-service error: 'invalid-request-cookie'
At line 285 in /var/www/example/public/recaptcha/code/RecaptchaField.php

RecatpchaField::validate(): Recaptcha-service error: 'invalid-request-cookie'
Line 285 of RecaptchaField.php
RecaptchaField->validate(RequiredFields)
Line 98 of RequiredFields.php
RequiredFields->php(Array)
Line 106 of Validator.php
Validator->validate()
Line 888 of Form.php
Form->validate()
Line 293 of Form.php
Form->httpSubmission(SS_HTTPRequest)
Line 143 of RequestHandler.php
RequestHandler->handleRequest(SS_HTTPRequest)
Line 161 of RequestHandler.php
RequestHandler->handleRequest(SS_HTTPRequest)
Line 147 of Controller.php
Controller->handleRequest(SS_HTTPRequest)
Line 199 of ContentController.php
ContentController->handleRequest(SS_HTTPRequest)
Line 67 of ModelAsController.php
ModelAsController->handleRequest(SS_HTTPRequest)
Line 282 of Director.php
Director::handleRequest(SS_HTTPRequest,Session)
Line 125 of Director.php
Director::direct(/contact-us/ContactForm)
Line 127 of main.php

ContactPage.php

<?php
class ContactPage extends Page {

    static $db = array(
        'Mailto' => 'Varchar(100)',
        'SubmitText' => 'Text',
        'GoogleMapsAPI' => 'Varchar(255)'
    );

    function getCMSFields() {
        $fields = parent::getCMSFields();

        $fields->removeFieldFromTab("Root.Content.Main", "Graphic");
        $fields->addFieldToTab("Root.Content.Contact", new TextField('Mailto', 'Email address to recieve the contact message'));    
        $fields->addFieldToTab("Root.Content.Contact", new TextareaField('SubmitText', 'Text to display sucsesfully sending a message'));       
        $fields->addFieldToTab("Root.Content.Contact", new TextareaField('GoogleMapsAPI', 'Google Maps API Key'));      
        return $fields; 
    }

    static $icon = "cms/images/treeicons/sent";

}

class ContactPage_Controller extends Page_Controller {  

    function ContactForm() {
        // Create fields          
        $fields = new FieldSet(
            new TextField('Name', 'Name<sup></sup>'),
            new EmailField('Email', 'Email<sup></sup>'),
            new TextField('Website', 'Website (if you have one already)'),
            new TextField('Telephone', 'Telephone'),
            new TextareaField('Message','Message<sup></sup>'),
            new OptionsetField('SendMeEmail', 'Send a copy to your email also', array('Yes'=>'Yes','No'=>'No')) 
        );

        // Create action
        $actions = new FieldSet(
            new FormAction('SendContactForm', ' ')
        );

        // Create Validators
        $validator = new RequiredFields('Name', 'Email', 'Message');

        $form = new Form($this, 'ContactForm', $fields, $actions, $validator);

        SpamProtectorManager::update_form($form, 'SendMeEmail');

        return $form;
    }

    function SendContactForm($data) {    

        $From = $data['Email'];
        $To = $this->Mailto;
        $Subject = "Contact Message"; 
        $email = new Email($From, $To, $Subject);
        $email->setTemplate('ContactAdminEmail');
        $email->populateTemplate($data);
        $email->send();

        if($data['SendMeEmail'] == 'Yes'){
            $email_client = new Email($To, $From, $Subject);
            $email_client->setTemplate('ContactClientEmail');
            $email_client->populateTemplate($data);
            $email_client->send();
        }
        //return to submitted message
        Director::redirect(Director::baseURL(). $this->URLSegment . "/?success=1");
    }

} 

2 ответа

Решение

Как воспроизвести:

  • Отключите JavaScript в вашем браузере
  • Перезагрузить форму
  • Вместо того, чтобы вводить значение капчи в поле "Введите два слова" (сгенерировать токен и скопировать его в поле внизу), поместите значение капчи прямо в поле внизу.
  • После отправки формы вы должны увидеть вышеуказанное сообщение об ошибке

Так что это проблема для пользователей с отключенным JavaScript, которые не читают данные инструкции должным образом.

Вы также можете посмотреть https://groups.google.com/group/recaptcha/browse_thread/thread/f881b776f3192703 дополнительную информацию.

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

Исправлено с помощью https://github.com/chillu/silverstripe-recaptcha/commit/59034ab - я подозреваю, что эти ошибки вызваны спам-ботами, а не пользователями.

Другие вопросы по тегам