Персональный блог веб-разработчика Майборода Владимира

Codeigniter авторизация

Поговорим немного об авторизации в Codeigniter. Я нашел пока 2 пути реализации, возможно, их больше. Первый вариант этот использование стороннего класса Ion Auth, и использование штатных средств, класса сессии.

Мы с Вами рассмотри штатный вариант, с использование сессий для авторизации на сайте. Данные сессии будем храниться в базе данных.

Первым делом нам необходимо включить в нашем контролере поддержку класса сессий и базы данных если она у Вас еще не включена.

$this->load->library('session');$this->load->library('database');

Теперь предположим, что страница с формой авторизации у Вас уже есть, и нам необходимо передать данные из формы в контролер. Поле логина у нас будет называться username а поле с паролем password. В контролере это будет выглядеть вот так.

$login = $this->input->post('username', true);$password = $this->input->post('password');

Для хранения сессии в базе данных нам необходимо создать таблицу, пусть это будет стандартная таблица которую нам предлагают в документации к фреймворку.

CREATE TABLE IF NOT EXISTS `ci_sessions` (session_id varchar(40) DEFAULT '0' NOT NULL,ip_address varchar(16) DEFAULT '0' NOT NULL,user_agent varchar(120) NOT NULL,last_activity int(10) unsigned DEFAULT 0 NOT NULL,user_data text NOT NULL,PRIMARY KEY (session_id),KEY `last_activity_idx` (`last_activity`));

После создания таблицы необходимо подправить файл конфигурации application/config/config.php. Найдите там строки $config[‘sess_use_database’] и $config[‘sess_table_name’] и приведите к виду который описан ниже.

$config['sess_use_database'] = TRUE;$config['sess_table_name'] = 'ci_sessions';

Теперь нам необходимо сделать запрос к базе данных, предполагаю, что она у вас уже есть, и запрос вы сами поставите в написанный ниже код. Пароль в базе рекомендую хранить в хешированном виде, например MD5.

$query_check_user = $this->db->query("SELECT * FROM users WHERE username = ".$this->db->escape($login)." and password = ".$this->db->escape($password)."");$userdata = $query_check_user->row_array(); // Если пользователь найденif (@$userdata['username'] == $login and @$userdata['password'] == $password) { // Создаем массим с данными сессии$authdata = array('username' => $login,'logged_in' => true); // Добавляем данные в сессию$this->session->set_userdata($authdata); // Редиректим на нужную нам страницуheader('Location: /office/');} // Если нет то выводим форму авторизацииelse {$this->load->view('start');}

Теперь нам остается проверить авторизован ли пользователь на странице, делается это достаточно просто.

$check_auth = $this->session->userdata('logged_in');if ($check_auth == true) {// Если авторизован}else {// Если нет}

Если Вы знаете еще варианты авторизации, то милости просим, поделитесь. Для проверки данных из формы можно использовать класс Form Validation.

Exit mobile version