Skip to content

Что такое pbAuth ​

pbAuth — вход, регистрация, восстановление пароля и профиль пользователя для сайтов на PageBlocks 3.x. Поверх учётных записей MODX: своей таблицы пользователей компонент не заводит и не подменяет modUser.

Это не самостоятельное приложение. Без PageBlocks компонент пишет ошибку в лог и выключается: оттуда приходят роутинг, контроллеры, файловые шаблоны, валидация, почта, миграции и шаблонизатор.

Без роутинга адресов не будет

pageblocks_routing должна стоять в Route Only или Full API. На значении по умолчанию /login и /register отвечают «страница не найдена», и выглядит это так, будто пакет не установился.

Что он делает и чего не делает ​

Компонент держит сценарии входа. Регистрация с подтверждением почты и повторной отправкой ссылки, вход по логину, почте или телефону, восстановление и смена пароля, подтверждение пароля перед опасным действием, профиль с аватаром, второй фактор, вход через шесть соцсетей, вход менеджера под пользователем, режим «один вход на учётную запись».

Вёрстку держит сайт. Двадцать чанков форм и два шаблона-обёртки кладутся в core/App/elements/auth/ при установке и с этого момента принадлежат сайту. Компонент их больше не касается — ни при обновлении, ни при удалении, если файл изменён.

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

Один результат — два пути ​

php
// Вёрстка — чанк в шапке шаблона, ссылки на готовые страницы
{include 'file:auth/chunks/auth.tpl'}

// Вёрстка — правка самой формы, обычная вёрстка в обычном файле
core/App/elements/auth/chunks/form.login.tpl

// Разработчик — поведение меняется настройкой, кодом или своим контроллером
core/App/config/pbauth.php

Ни один путь не проходит через другой: верстальщик правит .tpl и не открывает PHP, разработчик меняет поведение и не трогает разметку.

Сниппетов у pbAuth нет, и это не упущение в документации

У соседних компонентов трек вёрстки — сниппет: [[!pbProducts]], подменил чанк, готово. Здесь иначе: страницы /login, /register, /profile поднимает роутер PageBlocks, им не нужен ни ресурс, ни вызов в шаблоне. Нулевой шаг от этого получается даже короче, чем у сниппета — заводить нечего, адрес уже отвечает.

Цена — другая: чтобы поменять поведение, правится файл настроек на PHP, а не параметр вызова. Если в вашей команде вёрстка к файлам сайта доступа не имеет, смотрите на это заранее: &tpl= в pbAuth подставить некуда.

Почему роуты и контроллеры лежат в компоненте ​

До версии 1.1.0 установщик раскладывал роуты и контроллеры в core/App/, и сайт правил их на месте. Это работало до первого обновления: исправление в контроллере компонента до сайта не доезжало, потому что исполнялась его копия.

Теперь всё наоборот. Код живёт в компоненте и обновляется, а то, что сайт раньше менял правкой контроллера, стало настройкой: шаблоны, правила проверки, редиректы, группы пользователей, подмена самого контроллера — всё через core/App/config/pbauth.php.

Файл App/routes/auth.php выключает компонент целиком

Пока в core/App/routes/ лежит файл с именно этим именем, pbAuth считает, что сайт остался на старой схеме, и не подаёт ни одного своего адреса — иначе те же URI зарегистрировались бы дважды.

Обновление удаляет этот файл, если он байт в байт совпадает с поставочным. Правленый — остаётся, и удалить его нужно руками, перенеся правки в App/config/pbauth.php. Свои роуты кладите файлом с любым другим именем.

Что приносит своя таблица ​

Ровно одна возможность во всём компоненте требует своей таблицы — привязка аккаунтов соцсетей (pba_social_accounts). Связь «аккаунт у провайдера → пользователь» ищется при каждом входе, а искать её внутри JSON в профиле значит перебирать всех пользователей.

Всё остальное живёт в полях MODX: секрет второго фактора и резервные коды — в extended профиля под ключом pbauth, одноразовые ключи подтверждения и сброса — в штатном remote_key.

Куда идти дальше ​

pbAuth — вход, регистрация и профиль для PageBlocks