Tips: reCAPTCHA, CakePHP и Internet Explorer
Днес ми се наложи да вградя в един 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. По-трудното решение е да накарате капчата да се визуализира малко след като страницата се зареди, така ще избегнете това съобщение.
Надявам се публикацията Ви е била полезна и интересна. Отворен съм за въпроси по темата
Прочетете още:






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