Модуль Captcha

Комментарии: 42  Просмотры: 16 412

С модулем Captcha для версии Kohana 3.2 сейчас вообще интересная ситуация. Тот, что выложен под названием Kohana 3.x совершенно не работает на 3.2, возникает ошибка обращения к конфигурации в файле captcha.php, причем в трех местах. Вы можете исправить ее самостоятельно (обращение к конфигу для версии 3.2 описано Здесь), можете посмотреть как это сделано на GitHub, а можете скачать архив, где все это мной уже исправлено, только бери и пользуйся. Вот Отсюда. Как обычно распакуйте его в папку modules. Не забудьте скопировать конфиг из modules/captcha/config в /application/config/, так как его правки лучше производить в папке приложения, а не модулей.
Далее как обычно добавляем наш модуль в массив модулей в файле bootstrap.php:

'captcha'  => MODPATH.'captcha', //Captcha

Теперь в Контроллере для страниц, использующих капчу, пишем:

$captcha = Captcha::instance();

Далее нужно передать капчу в блок контента:

$content->captcha = $captcha;

или

$content->captcha = $captcha->render();

Работает оба варианта.
Ну и естественно в файле Вида добавляем:

<?php echo $captcha; ?>

Все. Осталось только организовать проверку правильности ввода капчи юзером. Я создал в Виде проверочную форму:

<form method="post">
    <input name="captcha" type="text" />
    <input name="ok" type="submit" value="Отправить" />
</form>

И добавил проверку в контроллер:

$content->message = '';
if($_POST)
    $content->message = Captcha::valid($_POST['captcha'])? 'Прахади дарагой' : 'Не угадал';

Получились как будто комментарии благодарных (и не очень) читателей с капчей. Посмотреть как это выглядит можно Здесь.
В конфигурационном файле имеются довольно гибкие настройки капчи. Можно менять размеры картинки, шрифт и даже саму капчу (параметр style). Ну и тут есть некоторые проблемы. Например, math у меня толком не заработал, все время выдавал неверный ответ, хотя складываю «3+2″ я вроде правильно. А riddle и word, указанные в качестве параметра для instance, увы, выдают ошибку Коханы. Если вы знаете решение проблемы — напишите об этом пожалуйста в комментариях.

Обсудить на форуме


К записи оставлено 42 коммент.

Здравствуйте.
Будьте добры, помочь решить такую проблему:

ErrorException [ Notice ]: Array to string conversion
SYSPATH\classes\kohana\arr.php [ 437 ]
432 }
433 else
434 {
435
436 // Find the values that are not already present
437 $diff = array_diff($val, $result[$key]);
438
439 // Indexed arrays are merged to prevent duplicates
440 $result[$key] = array_merge($result[$key], $diff);
441 }
442 }

Вот на днях написал Antispam модуль для Kohana 3.2.
Хорошая альтернатива каптче.

Поглядеть можно тут: https://github.com/evgentus/antispam
Почитать про него тут: http://habrahabr.ru/post/149181/

Можно будет потом ваш модуль добавить на этот сайт в Модули с описанием ? Не возражаете ?
Сам что-то подобное когда-то писал (не на Кохане), с проверкой времени заполнения формы, со скрытыми полями..

Конечно добавляйте. Не возражаю.

Что делать у меня вот такая ошибка выдается при обновлении страницы???
Kohana_Exception [ 0 ]: A valid cookie salt is required. Please set Cookie::$salt.

Привет!

Как установить заголовок страницы?

Я вывожу из контроллера изображение

class Controller_Captchagenerator extends Controller {

public function action_captcha()
{

// Создаём пустое изображение и добавляем текст
$im = imagecreatetruecolor(120, 20);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5, ‘A Simple Text String’, $text_color);

// Устанавливаем тип содержимого в заголовок, в данном случае image/jpeg
$this->request->headers['content-type'] = ‘image/jpeg’;

// Выводим изображение
imagejpeg($im);

// Освобождаем память
imagedestroy($im);

}

}

Но на выходе я не получаю изображение а просто бинарный текст картинки.

Информация о странице показывает что она ‘test/html’

Как указать что это ‘image/jpg’?
$this->request->headers['content-type'] = ‘image/jpeg’; Не работает!

Спасибо!

Здравствуйте. Недавно начал изучать Кохану. Большое спасибо за ваши уроки, очень помогают.

Вот разобрался с капчей. У меня Kohana3.3 — все работает: basic, alpha, black, word, math, riddle. Вот ссылка на архив, http://goo.gl/Ph0r6
Только одно важное условие — код проверки надо ставить выше
$captcha = Captcha::instance();

Я долго парился с этим, новичок все же)) Для капчи-картинки — все равно, а для текста (math и riddle) это обязательное условие.

Прикручиваю captcha на Kohana3.3 Не получается, при проверке выдает ошибку «Session_Exception [ 1 ]: Error reading session data.»
Переименовал все классы и папки в верхний регистр, в коде вызов классов text и url тоже переименовал в Text URL, но по прежнему не работает, у кого-нибудь была такая проблема?
Кстати в вашем архиве все классы в нижнем регистре, на версии 3.3 работать не будет…

class Controller_Captcha extends Controller {

public function action_index(){

$captcha=Captcha::instance()->render();
$content['captcha']=$captcha;
$this->response->body(View::factory(‘captcha’,$content));
}
}

вот такой вид

Модуль взял по вашей ссылке.
Скажите что я не правильно сделал? У меня выводится прямоугольничек, но самой картинки не видно.

вот такой вид: echo $captcha;

Круто все работает, но так проверка будет выглядеть лучше

$validation = Validation::factory($_POST)

->rule(‘captcha’, ‘not_empty’)
->rule(‘captcha’, ‘Model_Rule::check_captcha’,array(‘:value’, ‘:validation’, ‘:field’));

… модель …

public static function check_captcha($value, $validation, $field)
{

if(!Captcha::valid($value))
{
$validation->error($field, ‘Введенные символы в каптче не совпадают’);
}

}

Думаю кому-нибудь будет полезно..

подскажите что делать если вылазит ошибка:
Fatal error: Method Captcha_Alpha::__toString() must not throw an exception in

Распишите подробнее урок, тут больше половины пропущено, без подробного создания контроллера и вида, я допустим не совсем понял как применить капчу.



Оставить комментарий или два

Пожалуйста, зарегистрируйтесь для комментирования.