Tips: reCAPTCHA, CakePHP и Internet Explorer

reCAPTCHA Днес ми се наложи да вградя в един CakePHP проект reCAPTCHA. Не може да не сте чували за каптчата, ако не сте, значи живеете в 18ти век :) reCAPTCHA е една доста разпространена безплатна услуга, с помощта на която можете да се сдобиете с красива, работеща и най-вече сигурна каптча за нула време. Първо се изисква да се регистрирате в уеб сайта на reCAPTCHA за да получите своя публичен и личен код, който да използвате за да използвате приложението. reCAPTCHA е достъпна за PHP, ASP.NET, Classic ASP, Python, Perl, Ruby, Java, JSP, ColdFusion също така разполага с добавки за WordPress, MediaWiki, phpBB, Movable Type, Drupal, Symfony, Typoo, Joomla и други.  В общи линии може да я използвате навсякъде :) В този си пост искам да поговоря за лесното й вграждане в CakePHP приложение.

CakePHP и reCAPTCHA

Първо сваляме PHP пакета, който може да намерите тук – reCAPTCHA PHP, след това го разархивирате в /vendors/recaptcha/<тук трябва да са ви файловете>.

След това си създаваме един нов копонент в /app/controllers/components/recaptcha.php със следния код:

class RecaptchaComponent extends Object
{
    var $publickey = "";
    var $privatekey = "";
    function startup(&$controller)
    {
        $this->controller = $controller;
    }

    function render()
    {
        App::import('vendor', 'Recaptcha', array('file'=>'recaptcha/recaptchalib.php'));
        $error = null;
        echo recaptcha_get_html($this->publickey, $error);
    }

    function verify()
    {
        App::import('vendor', 'Recaptcha', array('file'=>'recaptcha/recaptchalib.php'));
        $resp = recaptcha_check_answer ($this->privatekey,
                                  $_SERVER["REMOTE_ADDR"],
                                  $_POST["recaptcha_challenge_field"],
                                  $_POST["recaptcha_response_field"]);
        if ($resp->is_valid)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

След това си добавяте в Controller-а, в който искате да използвате reCAPTCHA-ата следната функция, естествено преди това трябва да я заредите в компонентите ви:

function recaptcha()
 {
    $this->Recaptcha->render();
 }

Във View файла трябва да добавите следното, за да я визуализирате:

$this->requestAction(array(‘controller’ => ‘името-на-контролера-ви’, ‘action’ => ‘recaptcha’));

А проверката се прави по следния начин:

 if (!empty($this->data))
 {
     if ($this->Recaptcha->verify())
     {
       //Проверката е успешна
     }
 }

Беше лесно нали? Лесничко си е… :) Обаче като тръгнете да проверявате дали каптчата Ви работи под Internet Explorer (например 6 :) ) ще се сблъскате с:

Проблемите с Internet Explorer 6, 7

Едва ли се очудвате :) Нищо ново под слънцето. В интерес на истината има възможност и да не се сблъскате с такива проблеми и всичко да бъде наред. Но най-вероятно ще има такива. Красив попъп ще ви казва, че „Internet Explorer cannot open the Internet site: „URL“.

Ако видите това съобщение значи по всяка вероятност използвате jQuery или друг JavaScript фреймуорк в приложението Ви. Лесното решение е да не извиквате скрипта на определената страница в която ще имате reCAPTCHA. По-трудното решение е да накарате капчата да се визуализира малко след като страницата се зареди, така ще избегнете това съобщение.

Надявам се публикацията Ви е била полезна и интересна. Отворен съм за въпроси по темата :)

Прочетете още:

  1. Tips: CakePHP – recursive
  2. Internet Explorer 8 е най-сигурният браузър на света – wtf?


Дискусия

Все още няма коментари. Но ти можеш да напишеш първия! :)

Публикувай коментар (dofollow)

  • Author Avatar

    ТИ :)