В каждом проекте есть 2 таблицы, которые невозможно удалить, и на которых строится пользовательский функционал. Это таблицы “Пользователи” и “Сессии”.
Когда посетитель впервые открывает сайт в браузере, создается сессия. При повторном заходе мы узнаем посетителя по Cookies, и его сессия продолжается. Таким образом мы можем “запоминать” посетителей и сохранять в сессии какие-то данные (в колонке
data
) с помощью сценариев. Время жизни сессии ограничено датой, указанной в колонке expires
.Данные текущей сессии доступны в редакторе страниц:
Так же, сессии доступны в сценариях. Каждый раз, когда сценарий выполняется со страницы (с помощью формы, других компонентов или функции
page.executeBackendScenario
), в сценарии доступна переменная session
, с текущими данными сессии посетителя.Важно: чтобы изменить сессию, нужно вносить изменения не в переменную сценария, а в соответствующую запись в таблице “Сессии”.
Значение
member_id
сессии может содержать идентификатор пользователя. Если он указан — посетитель считается авторизованным пользователем, если не указан — посетитель считается гостем.Данные пользователей при этом хранятся в таблице “Пользователи”. Набор колонок в этой таблице может быть произвольным.
Это крайне простая, но невероятно гибкая схема позволяет реализовать функционал пользователей любой сложности с помощью сценариев.
Примеры сценариев
“Регистрация” пользователя — это добавление новой записи в таблицу “Пользователи”.
“Авторизация” пользователя — это указание идентификатора пользователя в колонку
member_id
сессии.“Выход” пользователя — это очистка (установка пустой строки) колонки
member_id
для сессии.Более сложный пример — двухфакторная авторизация, может быть реализована следующим образом:
- Пользователь вводит основной пароль
- В случае успеха, его перенаправляет на страницу ввода временного кода, в то же время, сценарий отправляет пользователю временный код (электронной почтой, смс, или другими способами рассылки сторонних сервисов).
- Пользователь вводит полученный временный код. В случае если код был указан верно, пользователь авторизуется успешно.