пятница, 17 декабря 2010 г.

DX Auth: Примеры. Пример использования reCAPTCHA

Десятая часть перевода документации библиотеки авторизации 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.

Похожие по тематике посты:

Комментариев нет: