Skip to content

fix(web-api): bind API token on email verify - #441

Merged
biz87 merged 6 commits into
betafrom
fix/issue-411-email-verify-api-token
Aug 7, 2026
Merged

fix(web-api): bind API token on email verify#441
biz87 merged 6 commits into
betafrom
fix/issue-411-email-verify-api-token

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

После GET /api/v1/customer/email/verify в PHP session попадали customer_id и legacy msCustomer.token, а cookie msCustomerToken оставался гостевым. Profile/addresses шли через session short-circuit, корзина и заказ — через guest API token (split-brain).

Логика привязки API-сессии вынесена в AuthManager::establishApiSession() (reuse гостевого токена из cookie → bind customer_id, extend TTL, bindDraftToCustomer; иначе новый токен + cookie). Метод используют verify, login и register. При сбое auto-login JSON возвращает success с token: null (email уже verified), как html-redirect без сессии.

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

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

Связанные Issues

Closes #411

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

Локальный гейт (без MODX/MySQL):

cd core/components/minishop3
php -l src/Services/Customer/AuthManager.php                    # exit 0
php -l src/Controllers/Api/Web/CustomerEmailController.php    # exit 0
php -l src/Processors/Api/Customer/Login.php                    # exit 0
php -l src/Processors/Api/Customer/Register.php                 # exit 0
php tests/EmailVerifyApiSessionTest.php                         # exit 0
php tests/CustomerPublicDtoTest.php                           # exit 0
php tests/EmailVerificationUrlTest.php                        # exit 0
  • Ручное тестирование
  • Автоматические тесты (static guard + смежные тесты)
  • Тестирование на разных версиях PHP/MODX

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

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

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

n/a

Чеклист

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

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

@Ibochkarev Ibochkarev added priority: high Важно исправить в ближайшее время bug Something isn't working labels Jul 23, 2026
@Ibochkarev
Ibochkarev force-pushed the fix/issue-411-email-verify-api-token branch 3 times, most recently from 9d0989d to 43dd885 Compare July 28, 2026 04:50
@Ibochkarev
Ibochkarev force-pushed the fix/issue-411-email-verify-api-token branch 3 times, most recently from 5a480fb to e92eb22 Compare August 1, 2026 09:34
Email verification wrote legacy msCustomer.token into PHP session while
the msCustomerToken cookie stayed guest, causing split-brain auth. Extract
establishApiSession() (same path as login) and use it from verify, login,
and register so cookie, session, and API token stay aligned.

Closes #411
@Ibochkarev
Ibochkarev force-pushed the fix/issue-411-email-verify-api-token branch from e92eb22 to 7c1dc4d Compare August 2, 2026 02:35
Ibochkarev and others added 5 commits August 2, 2026 09:06
Fix PHP 8.2 fatal when modX stub declares typed lexicon().
Anonymous subclasses must not redeclare parent properties with types
when ModxStub uses untyped $services (PHP 8.2 fatal).
Drop typed $services/$lexicon on anonymous modX subclasses when
ModxStub already declares untyped parent properties.
Alias documents API bind path; Login/Register/verify call the same method.
@biz87
biz87 merged commit e250867 into beta Aug 7, 2026
3 checks passed
@biz87
biz87 deleted the fix/issue-411-email-verify-api-token branch August 7, 2026 18:11
@Ibochkarev
Ibochkarev requested a review from biz87 August 7, 2026 18:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working priority: high Важно исправить в ближайшее время

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] Web API: email/verify логинит в session без bind API-токена (split-brain)

2 participants