Авторизация
01 июля 2009 года
CodeIgniter
CodeIgniter
- Содержание

Для проверки логина и пароля я использую callback функцию и небольшое расширение класса form_validation фреймворка CodeIgniter версии 1.7.1. Суть дела в том, что если в качестве параметра передать password
$this->form_validation->set_rules('login', ' ', 'required|callback_user_check[password]');
то функция user_check поймет это буквально и будет сравнивать значение поля password со строкой password.
Поэтому я сделал небольшое косметическое изменение в файле библиотеки. Находим в методе _execute
if (preg_match("/(.*?)\[(.*?)\]/", $rule, $match))
{
$rule = $match[1];
$param = $match[2];
}
и исправляем на
if (preg_match("/(.*?)\[(.*?)\]/", $rule, $match))
{
$rule = $match[1];
// $param = $match[2];
$param = ( $callback === TRUE && isset ($_POST[$match[2]]) ) ? $_POST[$match[2]] : $match[2]; // My fix
}
Таким образом, CodeIgniter будет сначала искать параметр в массиве POST-данных. Если найдет - передаст значение, иначе - переданный параметр.
Мой контроллер имеет следующие методы:
function index()
{
$login_form = array( 'name' => 'login', 'maxlength' => 16 );
$password_form = array( 'name' => 'password', 'maxlength' => 16 );
$submit_form = array( 'name' => 'btn', 'value' => 'Войти' );
if (set_value('login')) $login_form['value'] = set_value('login');
$content = array (
'login_form' => $login_form,
'password_form' => $password_form,
'submit_form' => $submit_form,
);
$this->load->view('my_view', $content);
}
function in()
{
$this->load->library('form_validation');
$this->form_validation->set_rules('login', ' ', 'required|callback_user_check[password]');
$this->form_validation->set_rules('password', ' ', 'required|md5');
if ($this->form_validation->run() == FALSE)
$this->index();
else
{
// авторизация
redirect('admin');
}
}
function user_check($login, $password)
{
if ($this->m_login->user_check($login, md5($password))) return TRUE;
$this->form_validation->set_message('user_check', 'Логин или пароль не верны.');
return FALSE;
}
Примерно так пишу авторизацию я, а как поступаете вы?
Скачать исправленный файл библиотеки.
Понравилась статья? Подпишись на RSS.
Комментарии
а общий принцип данной авторизации какой?
Ответитьcallback и form_validation
CodeIgniter содержит класс валидации, который при отправке формы проверяет, правильно ли заполнены данные. Используя стандартные средства CI мне бы пришлось писать отдельное условие проверки пароля внутри блока if ($this->form_validation->run()), но я вынес это в callback функцию.
Таким образом в моем примере форма проходит валидацию, если заполнены все поля (required) и пароль соотствует логину (user_check).
Ответить