Skip to content

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

Open
Ibochkarev wants to merge 1 commit into
betafrom
fix/issue-411-email-verify-api-token
Open

fix(web-api): bind API token on email verify#441
Ibochkarev wants to merge 1 commit 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
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 5217b16 to 28c9b28 Compare July 24, 2026 02:17
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)

1 participant