3

ReCaptcha スパム検証を設定した後、次のエラー メッセージが表示されます。ReCaptcha は正しく動作します。エラーが気になります。

Silverstripe バージョン 2.4.5 モジュールの使用: - spamprotection - 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");
    }

} 
4

2 に答える 2

2

再現方法:

  • ブラウザで JavaScript を無効にする
  • フォームをリロードする
  • 「2 つの単語を入力してください」フィールドにキャプチャ値を入力する (トークンを生成し、それを下部のフィールドにコピーする) 代わりに、キャプチャ値を下部のフィールドに直接入力します。
  • フォームを送信すると、上記のエラー メッセージが表示されます。

そのため、指定された指示を正しく読んでいない JavaScript が無効になっているユーザーにとっては問題です。

詳細については、https://groups.google.com/group/recaptcha/browse_thread/thread/f881b776f3192703も参照してください。

私の携帯電話では正常に動作していますが、これが一部のモバイル デバイスで動作しない場合は、非常に厄介です。かなり長い文字列を 2 番目のフィールドにコピーするためだけに最初のボックスに入力するのは、デバイスによっては面倒な場合と不可能な場合があります。

于 2011-08-10T23:39:35.973 に答える
0

https://github.com/chillu/silverstripe-recaptcha/commit/59034abで修正- これらのエラーは、ユーザーではなくスパム ボットが原因であると思われます。

于 2011-09-01T20:42:14.977 に答える