Создание системы сессий, авторизации и аутентификации в Catalyst. Часть 1. Сессии в Catalyst

Создание модели DBI в Catalyst. Использование DBI-модели. Реализация системы сессий в Catalyst, с помощью плагинов Catalyst::Plugin::Session::PerUser, Catalyst::Plugin::Session::Store::DBI, Catalyst::Plugin::Session::State::Cookie. Примеры кода, скриншоты.

Ввиду того, что VPS от REG.RU с некоторых пор убивает все процессы cpan на установку новых модулей, а новый хороший сервер для тестирования пока не найден, система авторизации разрабатывалась под Windows-окружением.

Создание системы сессий, авторизации и аутентификации в Catalyst. Часть 2. Аутентификация и авторизация
Создание системы сессий, авторизации и аутентификации в Catalyst. Часть 3. Роли пользователей

 

Создание модели DBI

1. Устанавливаем модуль Catalyst::Model::DBI

2.Создаем модель для работы с mysql.

lib/app/Model/DBI.pm :

DBIx было решено не использовать, т.к. в нагруженном проекте он не желателен, тормозит всю систему. Лучше даже не привыкать.

3. Создаем страничку, которая выведет хоть что-то из БД, чтобы проверить работоспособность модели.

lib/app/Controller/Root.pm :

root/src/index.tt :

 

Добавление сессий в Catalyst-приложение

1. Устанавливаем сессионные модули.

2. Создаем таблицу в БД.

Сессия - это некоторый идентификатор и набор данных, индивидуальный для каждого пользователя. Она позволяет идентифицировать пользователя, не заставляя его вводить свой логин/пароль, и другие данные,
при переходе на каждую страницу. Идентификатор сессии передается пользователю, и при каждом запросе, браузер возвращает заданный ID, позволяя опознавать пользователя. Традиционно, со стороны клиента для хранения ID сессии используются Cookies.

Catalyst использует два типа плагинов для работы с сессиями:

  1. State - отвечает за отправку ID сессии браузеру, получение ID от браузера, выясняет состояние сессии и т.п.
  2. Store - отвечает за хранение сессионных данных на стороне сервера. Для хранения могут использоваться файлы, база данных, память.

Как только вы подключаете сессионные модули в Catalyst, аутентификационная система автоматически начинает их использовать. Данные сессии будут доступны через $c->session . Для чтения и записи данных, можно использовать $c->session как обычный хэш.

3. Редактируем файл lib/app.pm, добавляем в список модули сессий и конфигурационные данные для хранения сессий со стороны сервера:

Для хранения сессий в приведенном примере был использован DBI и база данных mysql, но в реальных условиях нагруженных систем, это не лучший выбор. Существует множество плагинов Catalyst для хранения сессионных данных: Catalyst::Plugin::Session::Store::Redis, Catalyst::Plugin::Session::Store::MongoDB, Catalyst::Plugin::Session::Store::Memcached::Fast и другие. При проектировании реальной системы лучше использовать Memcached.

4. Создаем новый контроллер.

5. Проверяем работоспособность сессий.

lib/app/Controller/Root.pm :

lib/app/Controller/Auction.pm :

root/src/auction/index.tt :

Запускаем сервер. Сначала заходим на страницу http://localhost:3000/ - на ней в нашу сессию будет добавлен флаг подарка, который мы сможем использовать позднее.

Затем идем на страницу http://localhost:3000/auction - там будет выводиться флаг подарка, как демонстрация работы сессий.

В cookies браузера будет добавлено:

sessions2

В БД появится новая запись:

sessions1

 

Полезные ссылки по теме сессий Catalyst

search.cpan.org: Catalyst::Plugin::Session::PerUser

search.cpan.org: Catalyst::Plugin::Session::Store::DBI

search.cpan.org: Catalyst::Model::DBI

search.cpan.org: Catalyst::Plugin::Session::State::Cookie

catalystframework.org: Catalyst Advent - Day 15 - Sessions

catalystframework.org: Catalyst in 9 steps - step 5: A controller with a new SQLite DB, a light model and a TT view