new

pbAuth

pbAuth — система аутентификации, регистрации и профилей пользователей для PageBlocks
Бесплатно
Загрузите дополнение из админки вашего сайта.
Как загрузить?
Автор дополнения
Boshnik
Пакетов
14
Закачек
7 447
Автор дополнения
Пакетов
14
Закачек
7 447
Версия 1.0.1-pl
Дата выпуска 26.06.2025
Загрузки 1
Просмотры 27
Внимание, этот компонент требует версию PHP 7.4 или выше! Если ваш сайт использует PHP ниже требуемого, установка этого дополнения может его сломать.
Внимание, этот компонент требует версию MODX не ниже 2.8 !
Возможности
  • Аутентификация и регистрация через POST-запросы
  • Сброс и смена пароля
  • Профиль пользователя с возможностью редактирования данных
  • Загрузка аватара
  • Добавление пользователей в группы
  • Валидация и отображение ошибок через Fenom
  • Защита от CSRF и поддержка flash-сообщений
  • Расширяемые контроллеры и шаблоны

Быстрый старт


1. Активация роутинга
Для работы pbAuth необходимо включить роутинг в PageBlocks. Убедитесь, что системная настройка pageblocks_routing установлена в значение Route Only или Full API.

2. Подключение JavaScript для форм
Если вы хотите, чтобы формы авторизации и регистрации работали без перезагрузки страницы, включите настройку pageblocks_load_scripts. Это автоматически подключит необходимые скрипты, обрабатывающие отправку форм через AJAX, а также отрисовку ошибок и сообщений.

3. Вставка чанка с авторизацией
В шапку вашего сайта рекомендуется вставить один из готовых файловых чанков:
  • auth — классическая панель с кнопками входа/регистрации и отображением профиля,
  • auth_modal — модальное окно (если вы хотите встроить формы без отдельных страниц).

Пример подключения:
{insert 'file:auth/chunks/auth.tpl'}


Код чанка auth.tpl:
{auth}
    <a href="{route 'pageProfile'}" class="d-flex align-items-center gap-2 text-dark text-decoration-none">
        <div class="avatar d-flex align-items-center justify-content-center rounded-5 bg-secondary-subtle overflow-hidden" style="width:48px;height:48px">
            <img src="{$modx->user->getGravatar()}" width="48" height="48" alt="{$modx->user->username}">
        </div>
        <div class="d-flex flex-column">
            <strong>{$modx->user->username}</strong>
            <span>{$modx->user->email}</span>
        </div>
    </a>
{/auth}

{guest}
    <ul class="navbar-nav d-flex align-items-center list-unstyled mb-0">
        <li class="nav-item">
            <a class="btn btn-sm" href="{route 'pageLogin'}">{lang 'auth.login_title'}</a>
        </li>
        <li class="nav-item">
            <a class="btn btn-light btn-sm" href="{route 'pageRegister'}">{lang 'auth.register_title'}</a>
        </li>
    </ul>
{/guest}


Объяснение новых тегов:
  • {auth} и {guest} — условные блоки, отображающие содержимое только для авторизованных или неавторизованных пользователей соответственно.
  • {route 'имя_маршрута'} — получение ссылки по имени маршрута. Удобно при рефакторинге, чтобы не менять ссылки в шаблонах вручную.
  • {lang 'ключ_лексикона'} — получение фраз из языковых файлов (например, {lang 'auth.register_title'} — ищет переменную register_title из файла App/lang/en/auth.php).


4. Маршруты и структура
pbAuth поставляется с готовым набором маршрутов, которые регистрируются в файле core/App/routes/auth.php.
// Только для неавторизованных пользователей
Route::middleware('guest')->group(function () {
    Route::get('/login', 'Auth\LoginController@show')->name('pageLogin');
    Route::post('/login', 'Auth\LoginController@login')->name('login');

    Route::get('/register', 'Auth\RegisterController@show')->name('pageRegister');
    Route::post('/register', 'Auth\RegisterController@register')->name('register');

    Route::get('/forgot-password', 'Auth\ForgotPasswordController@show')->name('pageForgotPassword');
    Route::post('/forgot-password', 'Auth\ForgotPasswordController@forgotPassword')->name('forgotPassword');

    Route::get('/reset-password/{token}', 'Auth\ResetPasswordController@show')->name('pageResetPassword');
    Route::post('/reset-password', 'Auth\ResetPasswordController@resetPassword')->name('resetPassword');
});

// Только для авторизованных
Route::middleware('auth')->group(function () {
    Route::get('/confirm-password', 'Auth\ConfirmPasswordController@show')->name('pageConfirmPassword');
    Route::post('/confirm-password', 'Auth\ConfirmPasswordController@confirmPassword')->name('confirmPassword');

    Route::get('/profile', 'Auth\ProfileController@show')->name('pageProfile');
    Route::post('/profile', 'Auth\ProfileController@updateProfile')->name('updateProfile');

    Route::get('/profile/password', 'Auth\ChangePasswordController@show')->name('pageChangePassword');
    Route::post('/profile/password', 'Auth\ChangePasswordController@changePassword')->name('changePassword');

    Route::get('/logout', 'Auth\LoginController@logout')->name('logout');
});

// Подтверждение email
Route::get('/verify-email/{token}', 'Auth\AuthController@verifyEmail')->name('verifyEmail');


Список маршрутов:
  • /login — форма входа
  • /register — регистрация
  • /forgot-password — восстановление пароля
  • /reset-password/{token} — сброс пароля
  • /confirm-password — подтверждение пароля
  • /profile — редактирование профиля
  • /profile/password — смена пароля
  • /logout — выход
  • /verify-email/{token} — подтверждение email

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

Структура элементов аутентификации
  • Контроллеры — /core/App/Http/Controllers/Auth/
  • Основная логика регистрации, входа, восстановления пароля и т.д.
  • Шаблоны — /core/App/elements/auth/
  • Fenom-шаблоны форм и уведомлений, которые можно кастомизировать.
  • Лексиконы (переводы) — /core/App/lang/
  • Переводы на разные языки для сообщений, ошибок и интерфейса.
  • Маршруты — /core/App/routes/auth.php
  • Определяют доступные URL и обрабатывающие их контроллеры.

[1.0.1-pl] - 2025-06-25

Added

  • Avatar upload
  • Automatic user group assignment during registration

Improved

  • Form validation

Changed

  • Request import to Http\Request

Последние обсуждения в сообществе MODX.pro