Java, Groovy on Grails, PHP, Kohana

Блог о программировании на Java, Groovy on Grails, PHP, kohana

Прикручиваем Captcha к Kohana 3.2

На Github есть модуль captcha https://github.com/kolanos/kohana-captcha, но для kohana 3.2 в нем надо сделать некоторые изменения. В частности изменить вызовы конфигурационного файла с

$config = Kohana::config('captcha')

на

$config = Kohana::$config->load('captcha')

и заменить старый вариант вызова request:

Request::instance()->headers['Content-Type'] = 'image/'.$this->image_type;
Request::instance()->headers['Cache-Control'] = 'no-store, no-cache,
must-revalidate, post-check=0, pre-check=0';
Request::instance()->headers['Pragma'] = 'no-cache';
Request::instance()->headers['Connection'] = 'close';

на новый:

Request::current()->headers('Content-Type', 'image/'.$this->image_type);
Request::current()->headers('Cache-Control', 'no-store, no-cache,
must-revalidate, post-check=0, pre-check=0');
Request::current()->headers('Pragma', 'no-cache');
Request::current()->headers('Connection', 'close');

Далее, как обычно подключаем модуль в bootstrap.php, объявляем и получаем требуемое изображение:

$captcha = Captcha::instance();
$captcha->render();

Для организации смены картинки на странице на более читаемую воспользуемся вспомогательным элементом, к которому присоеденим функцию на onclick и с помощью jquery изменим картинку:

function reload(){
id=Math.floor(Math.random()*1000000);
$("img.captcha").attr("src","/captcha/default?id="+id);
}

Для совсем ленивых – вот ссылка: captcha.zip
Вот в общем то и все. Если вы используете другие решения, буду рад получить совет от вас.

Update(30/01/12):
Для некоторых читателей блога – туманно выглятит способ вывода капчи в браузер
(вот случайно набрел – http://hashcode.ru/questions/66933/каптча-kohana-3-2),
поэтому внесу некоторые пояснения:
Генерим капчу в контроллере и передаем в ввид:

<? defined('SYSPATH') or die('No direct script access.');
class Controller_Myform extends Controller_Template {

public function action_showmyform()
{

if(Captcha::valid($data['captcha'])
{
записываем данные в БД, например
}

$captcha_image = Captcha::instance()->render();

$view_my_form = View::factory('v_myform')->bind('captcha_image', $captcha_image);
$this->template->form = $view_my_form;

}
}

Ну и собственно наш вид:

<?=Form::open()?>
Введите имя:<?=Form::input('name')?>
<?=$captcha_image?>
Введите код указанный на рисунке:
<img alt="Обновить код" onclick="reload()" src="refresh.png"
style="cursor:pointer; vertical-align: super;" title="Обновить код" />
<?=Form::input('captcha')?>
<?=Form::submit('submit', 'Submit')?>
<?=Form::close()?>

P.S.
Кстати, по желанию “трудящихся” пришлось вставить в этот модуль генерации Captcha алгоритм от kchapcha 2.0, Добавляем к Kohana 3.2 kchapcha 2.0

  • Recent Posts