Skip to content

feat(web-api): customer logout and password recovery routes#442

Open
Ibochkarev wants to merge 5 commits into
betafrom
feat/issue-422-customer-auth-routes
Open

feat(web-api): customer logout and password recovery routes#442
Ibochkarev wants to merge 5 commits into
betafrom
feat/issue-422-customer-auth-routes

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

Публичный Web API не экспонировал процессоры logout / forgot-password / reset-password — headless-клиент не мог завершить сессию и восстановить пароль без connector.

Добавлен CustomerAuthController (login, register, logout, forgotPassword, resetPassword) и три новых маршрута. Login/register переведены на тот же контроллер вместо inline runProcessor. Logout идёт через TokenMiddleware, чтобы MS3TOKEN/cookie заполнили $_SESSION до отзыва токенов. Rate limit forgot-password отдаёт HTTP 429 через ['code' => HttpStatus::TOO_MANY_REQUESTS] в процессоре.

Тип изменений

  • Исправление бага (non-breaking change)
  • Новая функциональность (non-breaking change)
  • Breaking change (изменение, ломающее обратную совместимость)
  • Рефакторинг (без изменения функциональности)
  • Документация
  • Другое (опишите):

Связанные Issues

Closes #422

Как это было протестировано?

cd core/components/minishop3
php -l src/Controllers/Api/Web/CustomerAuthController.php   # exit 0
php -l src/Processors/Api/Customer/ForgotPassword.php         # exit 0
php -l config/routes/web.php                                  # exit 0
php tests/CustomerAuthRoutesTest.php                          # exit 0
php tests/OrdersRoutePermissionsTest.php                      # exit 0
php tests/EmailVerificationUrlTest.php                        # exit 0
  • Ручное тестирование
  • Автоматические тесты (router introspection + смежные)
  • Тестирование на разных версиях PHP/MODX

Конфигурация тестирования:

  • MiniShop3: beta branch
  • MODX: n/a (локально без инстанса)
  • PHP: 8.2+

Скриншоты (если применимо)

n/a

Чеклист

  • Код соответствует стилю проекта
  • Добавлены/обновлены комментарии в сложных местах
  • Изменения не ломают существующую функциональность
  • Лексиконы добавлены на двух языках (ru/en) — не требуется
  • PHPStan проходит без новых ошибок (локально; в CI пока нет)
  • ESLint проходит без ошибок — Vue не затронут
  • Обновлён CHANGELOG.md — по политике релиза

Дополнительные заметки

Wire existing Logout, ForgotPassword, and ResetPassword processors into
the public Web API via CustomerAuthController. Logout runs behind
TokenMiddleware so MS3TOKEN populates session before revocation; forgot-
password rate limits return HTTP 429 through processor failure codes.

Closes #422
@Ibochkarev Ibochkarev added priority: medium Средний приоритет enhancement New feature or request labels Jul 24, 2026
Limit password reset attempts to 5 per 15 minutes per IP and per reset
token, returning HTTP 429 via processor failure code. Clears counters on
successful reset to match login bruteforce protection.

Refs #422
Move JSON body parsing into CustomerAuthController *FromRequest methods
so web.php closures only delegate. Replace grep-based CustomerAuthRoutesTest
with Router introspection for middleware and handler delegation.

Refs #422
Reuse one closure factory per /customer group instead of five inline
CustomerAuthController instantiations. Test verifies factory via reflection.

Refs #422
Add CustomerAuthEndpointsTest with controller mapping checks, router
dispatch for logout (TokenMiddleware + session), and stdin-piped dispatch
for forgot/reset-password. WebApiModxStub mocks runProcessor without MODX.

Refs #422
@Ibochkarev
Ibochkarev requested a review from biz87 July 24, 2026 02:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request priority: medium Средний приоритет

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] Web API: роуты logout / forgot-password / reset-password (процессоры уже есть)

1 participant