Это более расширенный пример использования библиотеки 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

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