Это более расширенный пример использования библиотеки 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.
- CodeIgniter: библиотека DX Auth
- DX Auth: руководство пользователя. Начало
- DX Auth: Руководство пользователя. Справочник по функциям
- DX Auth: Руководство пользователя. События
- DX Auth: Руководство пользователя. Конфигурация
- DX Auth: Руководство пользователя. Модели
- DX Auth: Руководство пользователя. Анатомия таблиц
- DX Auth: Примеры. Простой пример
- DX Auth: Примеры. Расширенный пример
- DX Auth. Примеры. Пример использования reCAPTCHA
Комментариев нет:
Отправить комментарий