Усложняем стандартную капчу, при помощи reCaptcha
Рубрика: Работаем с капчей (captcha)
14 Окт. 2009
Вас смущает капча на вашем сайте? Так давайте сделаем её сложнее... В этом уроке мы поговорим про интеграцию с сервисом recaptcha. Вы наверняка встречались с этой большой красной капчей на многих забугровых сайтах...
Про то как переделывать капчу, я писал уже не раз:
...и много другого в разделе «Работа с капчей»
Сегодняшний обзор не будет моим собственным творением, а лишь описание одного из расширений для Yii. Оно скачено уже больше чем 300 раз, и поэтому заслужило моего небольшого внимания :)
- Первым делом нам надо зайти на сайт http://recaptcha.net/ и зарегистрироваться там.
- После чего мы сможем получить «public and private keys» для интеграции на нашем сайте
- Теперь заходим на страницу расширения recaptcha в раздел «Downloads» и загружаем к себе последнюю версию.
- Распаковать архив необходимо в папку protected/extensions, вашего Yii приложения. Так что бы у вас получилась структура:
protected/ extensions/ recaptcha/ reCAPTCHA EReCaptchaValidator.php EreCaptcha.php - В файле отображения где хотим подключить новую капчу:
<?php echo CHtml::activeLabel($user, 'validacion'); ?>
<?php $this->widget('application.extensions.recaptcha.EReCaptcha',
array('model'=>$user, 'attribute'=>'validacion',
'theme'=>'red', 'language'=>'es_ES',
'publicKey'=>'<your public key>')) ?>
<?php echo CHtml::error($user, 'validacion'); ?> - В файле Модели (если вы не используете ActiveRecord):
<?php
class UserModel extends CFormModel
{
public $validacion;
public function rules()
{
return array(
array('validacion',
'application.extensions.recaptcha.EReCaptchaValidator',
'privateKey'=>'<your private key>'),
);
}
public function attributeLabels()
{
return array(
'validacion'=>Yii::t('demo', 'Enter both words separated by a space: '),
);
}
}
Все. Обновляйте страничку и смотрите.
П.С. Если вы используете ActiveRecord, то последний пункт будет выглядеть несколько иначе:
- В rules вы добавляете новое правило:
public function rules()
{
return array(
...
array(
'validacion',
'application.extensions.recaptcha.EReCaptchaValidator',
'privateKey'=> ENVII_CAPTCHA_PRIVATE_KEY,
'on' => 'registerwcaptcha'
),
...
);
} - В контроллере делаете что то вроде этого:
public function actionRegister()
{
$form = new User();
$form->scenario = 'registerwcaptcha';
...
if($form->validate())
{
// and here is the actual HACKY part
$form->scenario = NULL;
// save user registration
$form->save();
}
}
Пользуемся!
Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
- Пожалуй новость про появление новой версии yii пишу позже всех т.к. мой интернет провайдер решил что на майских празниках я ... "Релиз Yii framework 1.1.2"
- Вы устали в ручную заполнять поля creted/modify в вашей таблице? Вам надоелио постоянно присваивать значения текущей даты при вставке/редактированию записи? ... "AutoTimestampBehavior"
- Если честно я немного подглядел список изменений которые уже были сделаны и решил опубликовать их для вас. Скорее всего изменения ... "Что нас ждет в 1.0.6?"

[guest] untitled
Было сказано: Вторник, 16 Март 2010
>П.С. Если вы используете ActiveRecord, то последний пункт будет выглядеть несколько иначе:
тут вроде исходники кодов местами перепутаны :)

[guest] Гость
Было сказано: Воскресенье, 08 Август 2010
На моём сайте рекапчу поаставил, а толку никакого... Обходят как-то...

[guest] Александр
Было сказано: Четверг, 30 Июнь 2011
дык антигейт капча сводит все усилия на нет)) 1000 разгадываний за 1бакс всего))


