Дополнительно/Расширения/HLOGIN - модуль регистрации

HLOGIN - модуль регистрации

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

Библиотека HLOGIN расширяет возможности фреймворка HLEB2, добавляя полноценную регистрацию пользователей на сайте, которая отличается простотой настроек и быстрой установкой, и, вместе с тем, удобной и разнообразной функциональностью, поддерживающей мультиязычность и несколько вариантов дизайна. Опционально можно вывести форму обратной связи, которая идёт дополнительно к регистрации и авторизации. В автоматически создаваемой админпанели находятся средства для управления пользователями и настройки отображения. После внедрения регистрации можно сразу направить свои мысли на создание контента для сайта.

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


#Установка

Шаг 1. Установка через Composer в проекте на основе фреймворка HLEB2:

$composer require phphleb/hlogin

Шаг 2. Установка библиотеки в проект. Будет предложено выбрать тип дизайна из нескольких:

$php console phphleb/hlogin --add

$composer dump-autoload


#Подключение

Шаг 3. Перед выполнением этого действия необходимо иметь действующее подключение к базе данных. В настройках проекта '/config/database.php' нужно добавить подключение или убедиться, что оно существует, а также проверить, что его название находится в параметре 'base.db.type'.

$php console hlogin/create-login-table

После этого консольной командой создаётся пользователь с правами администратора (будет предложено указать E-mail и пароль):

$php console hlogin/create-admin

Если нет возможности выполнить консольную команду, то создайте таблицы соответствующим SQL-запросом из файла `/vendor/phphleb/hlogin/planB.sql`. После этого зарегистрируйте администратора и установите ему 'regtype' равное 11.

Шаг 4. Теперь вы можете перейти на главную страницу-заглушку сайта, если это дефолтная страница фреймворка без изменений и убедиться, что доступны панели авторизации. Если библиотека устанавливается в разрабатываемый проект на фреймворке HLEB2 не с самого начала и заглушка удалена, то проверьте вход на странице '/en/login/action/enter/' сайта (с данными администратора из предыдущего шага).

Шаг 5. Установка регистрации на сайте на определенных страницах через маршрутизацию. Для этого нужно в файлах роутинга (папка проекта /routes/) задать следующие условия:

use App\Middlewares\Hlogin\Registrar;
use 
Phphleb\Hlogin\App\RegType;

Route::toGroup()->middleware(Registrar::class, data: [RegType::UNDEFINED_USER'>=']);
// Routes in this group will be available to all unregistered and registered users
// except those that were marked deleted and banned.
Route::endGroup();

Route::toGroup()->middleware(Registrar::class, data: [RegType::PRIMARY_USER'>=']);
// Routes in this group will be available to those who pre-registered (but didn't confirm E-mail),
// as well as to all registered users (including administrators).
Route::endGroup();

Route::toGroup()->middleware(Registrar::class, data: [RegType::REGISTERED_USER'>=']);
// Routes in this group will be available to all users who have completed full registration
// (confirmed by E-mail including administrators).
Route::endGroup();

Route::toGroup()->middleware(Registrar::class, data: [RegType::REGISTERED_COMMANDANT'>=']);
// Routes in this group will be available only to administrators.
Route::endGroup();

Route::toGroup()->middleware(Registrar::class, data: [RegType::PRIMARY_USER'>='Registrar::NO_PANEL]);
// Routes with check registration without displaying standard panels and buttons.
Route::endGroup();

Route::toGroup()->middleware(Registrar::class, data: [RegType::PRIMARY_USER'>='Registrar::NO_BUTTON]);
// Routes with check registration without displaying standard buttons.
Route::endGroup();

Достаточно распределить маршруты сайта по этим условиям (группам), чтобы к ним применялись правила авторизации пользователей.

Следует иметь в виду, что страницы, не попавшие ни в одну из таких групп с условиями, находятся вне правил регистрации и данная библиотека к ним не подключена.

Шаг 6. Настройка. После авторизации у администратора в профиле (/en/login/profile/) отображается кнопка входа в админпанель. В ней можно настроить панели регистрации и прочие параметры.


#Дополнительно

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

use Phphleb\Hlogin\App\AuthUser;

$user AuthUser::current();
if (
$user) {
    
// Status for the confirmed user.
    
$confirm $user->isConfirm();

    
// Obtaining the user's E-mail.
    
$email $user->getEmail();

    
// Result of the administrator check.
    
$isAdmin $user->isSuperAdmin();
    
// ... //
} else {
    
// The current user is not authorized.
}

Также можно добавить класс Phphleb\Hlogin\Container\Auth в контейнер и получить эти данные из него.

По умолчанию используемый язык панелей извлекается из параметра url (следующего за доменом) или метки lang в теге '<html lang="en">'. Установить принудительно дизайн и/или язык панелей на странице:

<?php

use Phphleb\Hlogin\App\PanelData;

// Force setting the panel design type on the page.
PanelData::setLocalDesign('base');

// Forced installation of the panel language on the page.
PanelData::setLocalLang('en');

#Управление панелями

Заменить стандартные кнопки авторизации можно на любые, предварительно отключив стандартные в админпанели. Собственным кнопкам возможно назначить одно из следующих действий (для JavaScript):

<script>
    
// Setting the design for the page via JS.
    // For example, this way you can set the `special` type for visually
    // impaired users without refreshing the page in the browser.
    
hloginSetDesignToPopups('special');

    
// Returns the design type to its original state.
    
hloginRevertDesignToPopups();

    
// Close all registration popups.
    
hloginCloseAllPopups();

    
// Open a specific window, in this case user registration.
    
hloginVariableOpenPopup('UserRegister');
    
// Or 'UserEnter', 'UserProfile', 'ContactMessage'

    // Displays an arbitrary custom message in the window (current design).
    
hloginOpenMessage('Title''Message <b>text</b>');

    
// If this function exists, it will be called every time a popup is opened, passing the popup type.
    
function hloginPopupVariableFunction(popupType) {
        
// Custom code. (popupType = 'UserRegister' / 'UserEnter' / 'UserPassword' / 'ContactMessage')
    
}
</
script>

Или, при помощи атрибутов:

<div>
    <
button class="hlogin-init-action" data-type="UserEnter">Enter</button>
    <
button class="hlogin-init-action" data-type="UserProfile">Profile</button>
    <
button class="hlogin-init-action" data-type="UserRegister">Register</button>
    <
button class="hlogin-init-action" data-type="ContactMessage">Contact Message</button>
    <
button class="hlogin-init-action" data-type="ChangeDesign" data-value="dark">Change Design (dark)</button>
    <
button class="hlogin-init-action" data-type="DefaultDesign">Default Design</button>
    <
button class="hlogin-init-action" data-type="ChangeLang" data-value="de">Change Lang (de)</button>
    <
button class="hlogin-init-action" data-type="DefaultLang">Default Lang</button>
    <
button class="hlogin-init-action" data-type="CustomMessage" data-value="Test message" data-title="Title message">
        
Custom Message
    
</button>
</
div>

Как можно понять, регистрация не может быть доступна для пользователей с отключенным JavaScript в браузере. Сейчас таких почти не осталось.


#Отдельные страницы

Если необходимо направить пользователя сразу на страницу входа или регистрации, то необходимых страниц автоматически создается несколько:

Страница регистрации
/ru/login/action/registration/

Страница входа
/ru/login/action/enter/

Страница профиля
/ru/login/profile/

Страница обратной связи
/ru/login/action/contact/

Страница админпанели с настройками регистрации
/ru/adminzone/registration/settings/


#Дополнительная обработка данных

При валидации значений на стороне бекенда, посылаемых из форм регистрации, также можно дополнительно обработать их собственным PHP-скриптом, при его наличии. Таким образом можно, например, добавить собственное поле в форму и проверить его самостоятельно. Запросы разделены на отдельные классы, которые можно найти в папке /vendor/phphleb/hlogin/Optional/Inserted/. Они могут быть использованы только после копирования в папку /app/Bootstrap/Auth/Handlers/.


#Дизайн

Собственный дизайн доступен при выборе типа "blank" в админпанели. После этого можно скопировать и изменить файл CSS любого другого дизайна из существующих, подключив его к сайту самостоятельно. Также можно внести правки по типу дизайна.

.hlogin-over-panel[data-design='base'input {
    
/* CSS rules for the "input" block of the "base" design */
}
.
hlogin-over-panel[data-design='dark'input {
    
/* CSS rules for the "input" block of the "dark" design */
}

#Локализация

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

Для backend-локализации скопируйте необходимые языковые файлы из /vendor/phphleb/hlogin/App/BackendTranslation/ в папку /app/Bootstrap/Auth/Resources/php/ и внесите изменения в последние.

Для frontend-локализации скопируйте необходимые языковые файлы (начинающиеся с 'hloginlang') из /vendor/phphleb/library/hlogin/web/js/ в папку /app/Bootstrap/Auth/Resources/js/ и внесите в них изменения.

Можно добавить дополнительный язык(и), создав соответствующие по названию файлы для backend и frontend локализаций, а также добавив его в перечень разрешённых языков настройки 'allowed.languages' файла /config/main.php (этот файл может дублироваться в Модулях).


#Админзона

При создании собственных дополнительных страниц в панели администратора, окружите их маршруты ограничением доступа, как показано далее:

use App\Middlewares\Hlogin\Registrar;
use 
Phphleb\Hlogin\App\RegType;

Route::toGroup()->middleware(Registrar::class, data: [RegType::REGISTERED_COMMANDANT'=']);
    
// Routes in this group will only be available to administrators.
Route::endGroup();

Создание страниц в разделе администратора описано в соответствующем разделе данной документации.


#Отправка писем

Отправка писем с уведомлениями и восстановлением доступа осуществляется при помощи библиотеки github.com/phphleb/muller. В админпанели указывается E-mail отправителя, для которого должна быть разрешена отправка с сервера, для большинства хостингов достаточно создать такой почтовый ящик. Доступный E-mail отправки находится в php.ini (sendmail_path = ... -f'email@example.com').

По умолчанию письма дополнительно логируются в папку '/storage/logs/' c окончанием 'mail.log' в названии файла. Это логирование отключается в настройках панели администратора.


#Почтовый сервер

Библиотека по умолчанию, применяемая для рассылки писем, обладает ограниченными возможностями и при развитии проекта подлежит замене на подходящий почтовый сервер или иной аналог.

Создайте класс App\Bootstrap\Auth\MailServer по адресу /app/Bootstrap/Auth/MailServer.php, который имплементирует интерфейс Phphleb\Hlogin\App\Mail\MailInterface. После создания файла письма будут отправляться с использованием этого класса, поэтому сначала нужно реализовать в нём собственную отправку для выбранного почтового сервера.


#Обновление библиотеки

Для обновления выполните консольные команды:

$composer update phphleb/hlogin

$php console phphleb/hlogin --add

$composer dump-autoload

В процессе установки выберите текущий дизайн, который используется по умолчанию.


#Ссылки

Библиотека HLOGIN на GitHub: github.com/phphleb/hlogin

Демонстрационная страница с регистрацией: auth2.phphleb.ru

Страница создана: @fomiash
К началу страницы