среда, 15 декабря 2010 г.

DX Auth: Примеры. Расширенный пример

Девятая часть перевода документации библиотеки авторизации DX Auth для фреймворка CodeIgniter.
Это более расширенный пример использования библиотеки DX Auth, для реализации контроллера Auth.
Все пояснения вы можете увидеть в комментариях кода контроллера.





class Auth extends Controller  
{  
    // Используется для проверки форм регистрации и смены пароля
    var $min_username = 4;  
    var $max_username = 20;  
    var $min_password = 4;  
    var $max_password = 20;  
 
     /* Конструктор */

    function Auth()  
    {  
        parent::Controller();  
          
        $this->load->library('Form_validation');  
        $this->load->library('DX_Auth');        
          
        $this->load->helper('url');  
        $this->load->helper('form');  
    }  
     
    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;  
    }  
 
    /* Проверка captcha */
    function captcha_check($code)  
    {  
        $result = TRUE;  
          
        if ($this->dx_auth->is_captcha_expired())  
        {  
            // Это сообщение можно изменить с помощью $lang
            $this->form_validation->set_message('captcha_check', 'Ваш код подтверждения устарел. Пожалуйста, попробуйте ещё раз.');              
            $result = FALSE;  
        }  
        elseif ( ! $this->dx_auth->is_captcha_match($code))  
        {  
            $this->form_validation->set_message('captcha_check', 'Ваш код подтверждения не совпадает с изображением. Попробуйте ещё раз.');             
            $result = FALSE;  
        }  
 
        return $result;  
    }  
          
    /* Конец функций обратного вызова */  
    /* Вход */
    function login()  
    {  
        if ( ! $this->dx_auth->is_logged_in())  
        {  
            $val = $this->form_validation;  
              
            // Устанавливаем правила проверки формы
            $val->set_rules('username', 'Имя пользователя', 'trim|required|xss_clean');  
            $val->set_rules('password', 'Пароль', 'trim|required|xss_clean');  
            $val->set_rules('remember', 'Запомнить меня', 'integer');  
 
            // Устанавливаем правило для включения captcha, если количество попыток входа больше максимально установленного в конфигурации
            if ($this->dx_auth->is_max_login_attempts_exceeded())  
            {  
                $val->set_rules('captcha', 'Код подтверждения', 'trim|required|xss_clean|callback_captcha_check');  
            }  
                  
            if ($val->run() AND $this->dx_auth->login($val->set_value('username'), $val->set_value('password'), $val->set_value('remember')))  
            {  
                // Пересылаем на домашнюю страницу  
                redirect('', 'location');  
            }  
            else  
            {  
                // Проверяем почему пользователь не смог войти. Потому что его заблокировали или нет?
                if ($this->dx_auth->is_banned())  
                {  
                    // Пересылаем на страницу с сообщением о заблокированной учётной записи
                    $this->dx_auth->deny_access('banned');  
                }  
                else  
                {                         
                    // По умолчанию не показываем captcha пока пользователь не исчерпал количество попыток входа установленное в конфигурации
                    $data['show_captcha'] = FALSE;  
                  
                    // Показываем captcha, если количество попыток входа достигло максимума установленного в конфигурации
                    if ($this->dx_auth->is_max_login_attempts_exceeded())  
                    {  
                        // Создаём catpcha                         
                        $this->dx_auth->captcha();  
                          
                        // Включаем отображение captcha в файле отображения
                        $data['show_captcha'] = TRUE;  
                    }  
                      
                    // Загружаем отображение страницы входа
                    $this->load->view($this->dx_auth->login_view, $data);  
                }  
            }  
        }  
        else  
        {  
            $data['auth_message'] = 'Вы уже вошли.';  
            $this->load->view($this->dx_auth->logged_in_view, $data);  
        }  
    }  
    /* Выход */
    function logout()  
    {  
        $this->dx_auth->logout();  
          
        $data['auth_message'] = 'Вы вышли.';          
        $this->load->view($this->dx_auth->logout_view, $data);  
    }  

    /* Регистрация пользователя */
    function register()  
    {         
        if ( ! $this->dx_auth->is_logged_in() AND $this->dx_auth->allow_registration)  
        {     
            $val = $this->form_validation;  
              
            // Устанавливаем правила проверки формы
            $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');  
              
            if ($this->dx_auth->captcha_registration)  
            {  
                $val->set_rules('captcha', 'Код подтверждения', 'trim|xss_clean|required|callback_captcha_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  
            {  
                // Если при регистрации используется captcha
                if ($this->dx_auth->captcha_registration)  
                {  
                    $this->dx_auth->captcha();                                          
                }  
 
                // Загружаем отображение страницы регистрации
                $this->load->view($this->dx_auth->register_view);  
            }  
        }  
        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);  
        }  
    }  
     
     /* Активация учётной записи */
    function activate()  
    {  
        // Получаем имя пользователя и ключ
        $username = $this->uri->segment(3);  
        $key = $this->uri->segment(4);  
 
        // Активируем учётную запись пользователя
        if ($this->dx_auth->activate($username, $key))   
        {  
            $data['auth_message'] = 'Ваша учётная запись успешно активирована. '.anchor(site_url($this->dx_auth->login_uri), 'Login');  
            $this->load->view($this->dx_auth->activate_success_view, $data);  
        }  
        else  
        {  
            $data['auth_message'] = 'Код активации введён не правильно. Пожалуйста проверьте вашу электронную почту ещё раз.';  
            $this->load->view($this->dx_auth->activate_failed_view, $data);  
        }  
    }  
    
     /* Восстановление забытого пароля */
    function forgot_password()  
    {  
        $val = $this->form_validation;  
          
        // Устанавливаем правила проверки формы
        $val->set_rules('login', 'Имя пользователя или адрес электронной почты', 'trim|required|xss_clean');  
 
        // Выполняем проверку формы и вызываем функцию восстановления забытого пароля
        if ($val->run() AND $this->dx_auth->forgot_password($val->set_value('login')))  
        {  
            $data['auth_message'] = 'Сообщение с инструкцией активации вашего нового пароля, было выслано на ваш адрес электронной почты.';  
            $this->load->view($this->dx_auth->forgot_password_success_view, $data);  
        }  
        else  
        {  
            $this->load->view($this->dx_auth->forgot_password_view);  
        }  
    }  
     
    /* Сброс пароля */
    function reset_password()  
    {  
        // Получаем имя пользователя и ключ
        $username = $this->uri->segment(3);  
        $key = $this->uri->segment(4);  
 
        // Сбрасываем пароль пользователя
        if ($this->dx_auth->reset_password($username, $key))  
        {  
            $data['auth_message'] = 'Ваш пароль был сброшен, '.anchor(site_url($this->dx_auth->login_uri), 'Login');  
            $this->load->view($this->dx_auth->reset_password_success_view, $data);  
        }  
        else  
        {  
            $data['auth_message'] = 'Ошибка сброса пароля. Имя пользователя и ключ не неправильные. Пожалуйста проверьте вашу электронную почту ещё раз и следуйте инструкциям.';  
            $this->load->view($this->dx_auth->reset_password_failed_view, $data);  
        }  
    }  
    
     /* Смена пароля */
    function change_password()  
    {  
        // Check if user logged in or not  
        if ($this->dx_auth->is_logged_in())  
        {             
            $val = $this->form_validation;  
              
            // Устанавливаем правила проверки формы  
            $val->set_rules('old_password', 'Старый пароль', 'trim|required|xss_clean|min_length['.$this->min_password.']|max_length['.$this->max_password.']');  
            $val->set_rules('new_password', 'Новый пароль', 'trim|required|xss_clean|min_length['.$this->min_password.']|max_length['.$this->max_password.']|matches[confirm_new_password]');  
            $val->set_rules('confirm_new_password', 'Подтверждение нового пароля', 'trim|required|xss_clean');  
              
            // Выполняем проверку форы и меняем пароль
            if ($val->run() AND $this->dx_auth->change_password($val->set_value('old_password'), $val->set_value('new_password')))  
            {  
                $data['auth_message'] = 'Ваш пароль был удачно изменён.';  
                $this->load->view($this->dx_auth->change_password_success_view, $data);  
            }  
            else  
            {  
                $this->load->view($this->dx_auth->change_password_view);  
            }  
        }  
        else  
        {  
            // Пересылаем на страницу входа 
            $this->dx_auth->deny_access('login');  
        }  
    }     
    
     /* Удаление учётной записи */
    function cancel_account()  
    {  
        // Проверяем вошёл пользователь или нет
        if ($this->dx_auth->is_logged_in())  
        {             
            $val = $this->form_validation;  
              
            // Устанавливаем правила проверки формы
            $val->set_rules('password', 'Пароль', "trim|required|xss_clean");  
              
            // Выполняем проверку и удаляем учётную запись пользователя 
            if ($val->run() AND $this->dx_auth->cancel_account($val->set_value('password')))  
            {  
                // Пересылаем на домашнюю страницу 
                redirect('', 'location');  
            }  
            else  
            {  
                $this->load->view($this->dx_auth->cancel_account_view);  
            }  
        }  
        else  
        {  
            // Пересылаем на страницу входа  
            $this->dx_auth->deny_access('login');  
        }  
    }     
}  
Этот пример вы можете обнаружить в файле controllers/auth.php, который включен в пакет поставки библиотеки DX Auth.

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

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