Десятая часть перевода документации библиотеки авторизации DX Auth для фреймворка CodeIgniter.
Рассмотрим расширенный пример контроллера Auth, демонстрирующий возможность использования reCAPTCHA с библиотекой DX Auth. Убедитесь, что вы указали общий и личный ключ в файле конфигурации, иначе пример не будет работать.
Часть контроллера Auth (controllers/auth.php) демонстрирующая работу reCAPTCHA:
class Auth extends Controller
{
// Используется для проверки форм регистрации и смены пароля
var $min_username = 4;
var $max_username = 20;
var $min_password = 6;
var $max_password = 10;
function Auth()
{
parent::Controller();
$this->load->library('Form_validation');
$this->load->library('DX_auth');
}
function index()
{
$this->login();
}
/* Функции обратного вызова */
function username_check($username)
{
$result = $this->dx_auth->is_username_available($username);
if ( ! $result)
{
$this->form_validation->set_message('username_check','Имя пользователя уже используется. Пожалуйста, выберите другое имя.');
}
return $result;
}
function email_check($email)
{
$result = $this->dx_auth->is_email_available($email);
if ( ! $result)
{
$this->form_validation->set_message('email_check', ''Адрес электронной почты используется другим пользователем. Пожалуйста, выберите другой адрес электронной почты.');
}
return $result;
}
function recaptcha_check()
{
$result = $this->dx_auth->is_recaptcha_match();
if ( ! $result)
{
$this->form_validation->set_message('recaptcha_check','Ваш код подтверждения не совпадает с изображением. Попробуйте ещё раз.');
}
return $result;
}
/* Конец функций обратного вызова */
function register_recaptcha()
{
if ( ! $this->dx_auth->is_logged_in() AND $this->dx_auth->allow_registration)
{
$val = $this->form_validation;
// Set form validation rules
$val->set_rules('username', 'Имя пользователя', 'trim|required|xss_clean|min_length['.$this->min_username.']|max_length['.$this->max_username.']|callback_username_check|alpha_dash');
$val->set_rules('password', 'Пароль', 'trim|required|xss_clean|min_length['.$this->min_password.']|max_length['.$this->max_password.']|matches[confirm_password]');
$val->set_rules('confirm_password', 'Подтверждение пароля', 'trim|required|xss_clean');
$val->set_rules('email', 'Электронная почта', 'trim|required|xss_clean|valid_email|callback_email_check');
// Проверяем используется ли при регистрации captcha
if ($this->dx_auth->captcha_registration)
{
// Устанавливаем правила reCAPTCHA
// ВАЖНО: Не меняйте 'recaptcha_response_field' потому что оно используется reCAPTCHA API,
// Это ограничение reCAPTCHA, не библиотеки DX Auth
$val->set_rules('recaptcha_response_field', 'Код подтверждения', 'trim|xss_clean|required|callback_recaptcha_check');
}
// Выполняем проверку формы и регистрируем пользователя, если он прошёл проверку
if ($val->run() AND $this->dx_auth->register($val->set_value('username'), $val->set_value('password'), $val->set_value('email')))
{
// Устанавливаем сообщение об успешной регистрации
if ($this->dx_auth->email_activation)
{
$data['auth_message'] = 'Вы успешно зарегистрировались. Проверьте вашу электронную почту для активации учётной записи.';
}
else
{
$data['auth_message'] = 'Вы успешно зарегистрировались. '.anchor(site_url($this->dx_auth->login_uri), 'Login');
}
// Загружаем отображение страницы успешной регистрации
$this->load->view($this->dx_auth->register_success_view, $data);
}
else
{
// Загружаем отображение страницы регистрации
$this->load->view('auth/register_recaptcha_form');
}
}
elseif ( ! $this->dx_auth->allow_registration)
{
$data['auth_message'] = 'Регистрация отключена.';
$this->load->view($this->dx_auth->register_disabled_view, $data);
}
else
{
$data['auth_message'] = 'Перед тем как зарегистрироваться, необходимо выйти.';
$this->load->view($this->dx_auth->logged_in_view, $data);
}
}
}
Файл отображения формы регистрации с использованием reCAPTCHA (auth/register_recaptcha_form).
<?php
$username = array(
'name' => 'username',
'id' => 'username',
'size' => 30,
'value' => set_value('username')
);
$password = array(
'name' => 'password',
'id' => 'password',
'size' => 30,
'value' => set_value('password')
);
$confirm_password = array(
'name' => 'confirm_password',
'id' => 'confirm_password',
'size' => 30,
'value' => set_value('confirm_password')
);
$email = array(
'name' => 'email',
'id' => 'email',
'maxlength' => 80,
'size' => 30,
'value' => set_value('email')
);
?>
<html>
<body>
<fieldset><legend>Регистрация</legend>
<?php echo form_open($this->uri->uri_string())?>
<dl>
<dt><?php echo form_label('Имя пользователя', $username['id']);?></dt>
<dd>
<?php echo form_input($username)?>
<?php echo form_error($username['name']); ?>
</dd>
<dt><?php echo form_label('Пароль', $password['id']);?></dt>
<dd>
<?php echo form_password($password)?>
<?php echo form_error($password['name']); ?>
</dd>
<dt><?php echo form_label('Подтверждение пароля', $confirm_password['id']);?></dt>
<dd>
<?php echo form_password($confirm_password);?>
<?php echo form_error($confirm_password['name']); ?>
</dd>
<dt><?php echo form_label('Электронная почта', $email['id']);?></dt>
<dd>
<?php echo form_input($email);?>
<?php echo form_error($email['name']); ?>
</dd>
<?php if ($this->dx_auth->captcha_registration): ?>
<dt></dt>
<dd>
<?php
// Показываем изображение reCAPTCHA
echo $this->dx_auth->get_recaptcha_image();
// Показываем ссылку обновления reCAPTCHA
echo $this->dx_auth->get_recaptcha_reload_link();
// Показываем переключатель на изображение или аудио reCAPTCHA
echo $this->dx_auth->get_recaptcha_switch_image_audio_link();
?>
</dd>
<dt><?php echo $this->dx_auth->get_recaptcha_label(); ?></dt>
<dd>
<?php echo $this->dx_auth->get_recaptcha_input(); ?>
<?php echo form_error('recaptcha_response_field'); ?>
</dd>
<?php
// Получаем reCAPTCHA JavaScript и HTML код для браузеров с отключенным JavaScript
echo $this->dx_auth->get_recaptcha_html();
?>
<?php endif; ?>
<dt></dt>
<dd><?php echo form_submit('register','Регистрация');?></dd>
</dl>
<?php echo form_close()?>
</fieldset>
</body>
</html>
Этот пример вы можете найти в файлах controllers/auth.php и views/auth/register_recaptcha_form.php, которые включены в пакет поставки библиотеки DX Auth.
- CodeIgniter: библиотека DX Auth
- DX Auth: руководство пользователя. Начало
- DX Auth: Руководство пользователя. Справочник по функциям
- DX Auth: Руководство пользователя. События
- DX Auth: Руководство пользователя. Конфигурация
- DX Auth: Руководство пользователя. Модели
- DX Auth: Руководство пользователя. Анатомия таблиц
- DX Auth: Примеры. Простой пример
- DX Auth: Примеры. Расширенный пример
- DX Auth. Примеры. Пример использования reCAPTCHA

Комментариев нет:
Отправить комментарий