воскресенье, 5 декабря 2010 г.

CodeIgniter: библиотека DX Auth

DX Auth библиотека авторизации для фреймворка CodeIgniter. Даёт возможность легко подключать к вашему проекту гибкую систему авторизации, настраиваемую от простой до полной системы аутентификации.

DX Auth позволяет использовать интернационализацию настраиваемую через языковые файлы.

Библиотека DX Auth основана на библиотеке CL Auth 0.2.5 разработанной Джейсоном Эшдауном (Jason Ashdown).




Особенности DX Auth

  • Основа аутентификации (вход, выход, регистрация, смена пароля)
  • Функция 'запомнить меня'
  • Авторизация с помощью имени пользователя или e-mail, или оба сразу ( в зависимости от настройки конфигурации)
  • Восстановление забытого пароля
  • Блокировка пользователя
  • Данные о последнем входе пользователя - IP-адрес и время (подключается в конфигурации)
  • Активация через e-mail (подключается в конфигурации)
  • Профиль пользователя (подключается в конфигурации)
  • Система ролей (администратор, пользователь, модератор и т.д.). Поддержка наследования ролей
  • Ограничение доступа на основе URI и роли
  • Настраиваемый доступ для каждой роли
  • Ограничение количества попыток входа. Через определённое количество попыток можно включить captcha для защиты от ботов.
  • События (Например, вы может подключить свой код, как личное сообщение с приветствием после активации пользователя и т. д.)
  • Captcha (доступны встроенная captcha и reCAPTCHA)
  • Простая панель управления пользователями. (Вы можете включить её в свой административный интерфейс или удалив использовать свою панель управления
  • Большинство функций не являются обязательными. Вы можете отключить их в конфигурационном файле, просто не использовать или просто удалить

Отличая DX Auth от библиотеки CL Auth 0.2.5

Если вы раньше использовали CL Auth, возможно вы захотите узнать, какие произошли изменения с CL Auth 0.2.5.

  • Исправлены различные ошибки
  • Добавлены и изменены функции
  • Изменена структура кода
  • Группы изменены на роли
  • Совместимость с сессиями CodeIgniter без хаков
  • Добавлен языковой файл для поддержки интернационализации
  • Имена функций изменены с CamelCase на lower_case
  • Исходный код написан в соответствии с Руководством пользователя CodeIgniter
  • Код комментирован, что бы вам было легче в нём разобраться
  • Детальное руководство пользователя в соответствии с шаблоном Руководства пользователя CodeIgniter
  • Что-то ещё о чём я не помню :)

Скачать DX Auth

DX Auth 1.0.6 на github

DX Auth на github


Инструкция по установке

Установка библиотеки DX Auth с примерами, входящими в комплект

  1. Распакуйте архив
  2. Скопируйте каталог captcha в каталог к CodeIgniter. Сделайте этот каталог доступным для записи веб-сервером.
  3. Скопируйте каталог application в каталог application вашего приложения CodeIgniter'а
  4. Установите схемы базы данных DX Auth в вашу базу данных
  5. Откройте файл application/config/config.php. Установите в $config['sess_use_database'] = TRUE

Установка библиотеки DX Auth без примеров

  1. Распакуйте архив
  2. Скопируйте каталог captcha в каталог к CodeIgniter. Сделайте этот каталог доступным для записи веб-сервером.
  3. Скопируйте каталог application/plugins/ в каталог application/plugins/ вашего приложения CodeIgniter
  4. Скопируйте каталог application/config/ в каталог application/config/ вашего приложения CodeIgniter
  5. Скопируйте каталог application/libraries/ в каталог application/libraries/ вашего приложения CodeIgniter
  6. Скопируйте каталог application/helpers/ в каталог application/helpers/ вашего приложения CodeIgniter
  7. Скопируйте каталог application/models/ в каталог application/models/ вашего приложения CodeIgniter
  8. Скопируйте каталог application/language/ в каталог application/language/ вашего приложения CodeIgniter
  9. Установите схемы базы данных DX Auth в вашу базу данных
  10. Откройте файл application/config/config.php. Установите в $config['sess_use_database'] = TRUE

Вот и всё!

Если вы только начали изучать DX Auth, пожалуйста прочтите раздел "Начало" руководства пользователя DX Auth.


Схема базы данных

Далее приведена схема данных необходимая для работы библиотеки DX Auth, так же эту схему можно взять из архива с DX Auth, в файле 'schema.sql'

В схеме установлены:

  • Сессии CodeIgniter в таблице с именем 'ci_sessions'. Вы можете удалить установочный скрипт 'ci_sessions', если эта таблица у вас уже установлена.
  • Таблицы библиотеки DX Auth
  • Пользователь с ролью 'администратор' ('admin'), имя пользователя: admin, пароль: hello
  • Пользователь с ролью 'пользователь' ('user'), имя пользователя: user, пароль: hello
  • Базовые роли в таблице role_table ('пользователь' ('user') и 'администратор' ('admin'))

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

-- --------------------------------------------------------

--
-- Структура таблицы `ci_sessions`
--

CREATE TABLE IF NOT EXISTS `ci_sessions` (
  `session_id` varchar(40) collate utf8_bin NOT NULL default '0',
  `ip_address` varchar(16) collate utf8_bin NOT NULL default '0',
  `user_agent` varchar(150) collate utf8_bin NOT NULL,
  `last_activity` int(10) unsigned NOT NULL default '0',
  `user_data` text collate utf8_bin NOT NULL,
  PRIMARY KEY  (`session_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

-- --------------------------------------------------------

--
--  Структура таблицы `login_attempts`
--

CREATE TABLE IF NOT EXISTS `login_attempts` (
  `id` int(11) NOT NULL auto_increment,
  `ip_address` varchar(40) collate utf8_bin NOT NULL,
  `time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;


-- --------------------------------------------------------

--
--  Структура таблицы `roles`
--

CREATE TABLE IF NOT EXISTS `roles` (
  `id` int(11) NOT NULL auto_increment,
     `parent_id` int(11) NOT NULL default '0',
  `name` varchar(30) collate utf8_bin NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=3 ;

--
-- Дамп данных для таблицы `roles`
--

INSERT INTO `roles` (`id`, `parent_id`, `name`) VALUES
(1, 0, 'User'),
(2, 0, 'Admin');

-- --------------------------------------------------------

--
--  Структура таблицы `permissions`
--

CREATE TABLE IF NOT EXISTS `permissions` (
  `id` int(11) NOT NULL auto_increment,
  `role_id` int(11) NOT NULL,
  `data` text collate utf8_bin,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
--  Структура таблицы `users`
--

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL auto_increment,
  `role_id` int(11) NOT NULL default '1',
  `username` varchar(25) collate utf8_bin NOT NULL,
  `password` varchar(34) collate utf8_bin NOT NULL,
  `email` varchar(100) collate utf8_bin NOT NULL,
  `banned` tinyint(1) NOT NULL default '0',
  `ban_reason` varchar(255) collate utf8_bin default NULL,
  `newpass` varchar(34) collate utf8_bin default NULL,
  `newpass_key` varchar(32) collate utf8_bin default NULL,
  `newpass_time` datetime default NULL,
  `last_ip` varchar(40) collate utf8_bin NOT NULL,
  `last_login` datetime NOT NULL default '0000-00-00 00:00:00',
  `created` datetime NOT NULL default '0000-00-00 00:00:00',
  `modified` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=3 ;

--
-- Дамп данных для таблицы `users`
--

INSERT INTO `users` (`id`, `role_id`, `username`, `password`, `email`, `banned`, `ban_reason`, `newpass`, `newpass_key`, `newpass_time`, `last_ip`, `last_login`, `created`, `modified`) VALUES
(1, 2, 'admin', '$1$i75.Do4.$ROPRZjZzDx/JjqeVtaJLW.', 'admin@localhost.com', 0, NULL, NULL, NULL, NULL, '127.0.0.1', '2008-11-30 04:56:38', '2008-11-30 04:56:32', '2008-11-30 04:56:38'),
(2, 1, 'user', '$1$bO..IR4.$CxjJBjKJ5QW2/BaYKDS7f.', 'user@localhost.com', 0, NULL, NULL, NULL, NULL, '127.0.0.1', '2008-12-01 14:04:14', '2008-12-01 14:01:53', '2008-12-01 14:04:14');

-- --------------------------------------------------------

--
--  Структура таблицы `user_autologin`
--

CREATE TABLE IF NOT EXISTS `user_autologin` (
  `key_id` char(32) collate utf8_bin NOT NULL,
  `user_id` mediumint(8) NOT NULL default '0',
  `user_agent` varchar(150) collate utf8_bin NOT NULL,
  `last_ip` varchar(40) collate utf8_bin NOT NULL,
  `last_login` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`key_id`,`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

-- --------------------------------------------------------

--
--  Структура таблицы `user_profile`
--

CREATE TABLE IF NOT EXISTS `user_profile` (
  `id` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL,
  `country` varchar(20) collate utf8_bin default NULL,
  `website` varchar(255) collate utf8_bin default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=2 ;

--
-- Дамп данных для таблицы `user_profile`
--

INSERT INTO `user_profile` (`id`, `user_id`, `country`, `website`) VALUES
(1, 1, NULL, NULL);

-- --------------------------------------------------------

--
--  Структура таблицы `user_temp`
--

CREATE TABLE IF NOT EXISTS `user_temp` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(255) collate utf8_bin NOT NULL,
  `password` varchar(34) collate utf8_bin NOT NULL,
  `email` varchar(100) collate utf8_bin NOT NULL,
  `activation_key` varchar(50) collate utf8_bin NOT NULL,
  `last_ip` varchar(40) collate utf8_bin NOT NULL,
  `created` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;

Похожие по тематике посты:

6 комментариев:

blogaster комментирует...

Интересно... но данный код будет работать только до 5 версии PHP, а начиная с пятой не работает.. что делать?

Unknown комментирует...

Обновите ссылку на скачивание DX Auth, а то она не работает

alex комментирует...

Похоже библиотека DX Auth больше не поддерживается. Сайт автора не работает.
Когда найду альтернативный источник, размещу ссылку.

Val комментирует...

Я залил файлы а как первый запуск сделать не пойму??

Spot комментирует...

Открываю форму авторизации по адресу: http://ci.test1.ru/auth/login
нажимаю Login, перенаправляет на адрес: http://ci.test1.ru/auth/ci.test1.ru/auth/login
и конечно же 404 Page Not Found
Как это исправить?

Анонимный комментирует...

Что-то, про Систему ролей... ничего не понял. Как она работает? Может, кто знаeт статейку на эту тему? Дайте ссылочку.