Ошибка: RecaptchaField :: validate (): Ошибка службы Recaptcha: 'invalid-request-cookie' - PullRequest
3 голосов
/ 10 августа 2011

Я получаю следующее сообщение об ошибке после настройки проверки на спам 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 ]

2 голосов
/ 11 августа 2011

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

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

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

Возможно, вы захотите взглянуть на https://groups.google.com/group/recaptcha/browse_thread/thread/f881b776f3192703 для получения более подробной информации.

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

0 голосов
/ 02 сентября 2011

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

...