Авторизация

  • Содержание

Для проверки логина и пароля я использую 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.

Советую почитать:

Pagination Class в CodeIgniter

Теги: codeigniter авторизация, авторизация codeigniter

Диалог с компьютером Mootools. Оптимизация выборки

Комментарии

  • Максим написал 18 апреля 2010 года

    а общий принцип данной авторизации какой?
    callback и form_validation

    Ответить
  • Александр написал 19 апреля 2010 года

    CodeIgniter содержит класс валидации, который при отправке формы проверяет, правильно ли заполнены данные. Используя стандартные средства CI мне бы пришлось писать отдельное условие проверки пароля внутри блока  if ($this->form_validation->run()), но я вынес это в callback функцию.

    Таким образом в моем примере форма проходит валидацию, если заполнены все поля (required) и пароль соотствует логину (user_check).

    Ответить