feat(web-api): контракт customer auth для Nuxt SSR (me / refresh / Bearer bind) - #588
Conversation
|
Привет! Влил по твоему порядку #584 и #583 — оба в Этот PR нужно ребейзнуть на текущую Суть конфликта. PR писался до вливания #584, и в нём удалены/перенесены методы, которые #584 как раз добавил:
Плюс собственный тест PR после мержа с То есть контракт «резолв живёт в одном месте» конфликтует с тем, как метод выглядит после #584. При ребейзе важно, чтобы strip query-токенов сохранился в том слое, куда переедет резолв, — иначе #576 частично откатится. Мелочь заодно: файл Сам код посмотрел, вопросов нет: Дальше по твоему списку иду: #586, #587, #595, потом #580 после ребейза, #585 отдельно. |
14052e2 to
1b8c87c
Compare
…arer bind) Add GET /customer/me introspection, real POST /customer/token/refresh rotation, and validate Bearer before binding guest cart on login/register.
TokenMiddleware no longer owns resolveToken(); modx-pro#576 checks target TokenService::resolveTokenFromRequest after the modx-pro#571 auth rebase.
bda8377 to
baa55f4
Compare
After rebase onto beta with customer auth contract, middleware calls syncSessionFromToken(); journey doubles must implement it.
* test(web-api): add headless Nuxt journey suite via Router envelope Catch storefront wire regressions (middleware, HTTP status, cart→login transfer) that domain-only tests miss. Closes the Phase A+B gate for #574. * fix(test): load Sqlite draft harness via bootstrap on Linux PSR-4 maps Support/ but files live in tests/support/; CI is case-sensitive and failed with trait not found (#595). * test(web-api): align journey suite with beta CORS and mint contracts After rebase onto #584/#583: use CorsConfig::isOriginAllowed for preflight smoke, and expect 500/internal mint failure instead of 401. * test(web-api): sync Journey token stubs with TokenMiddleware (#588) After rebase onto beta with customer auth contract, middleware calls syncSessionFromToken(); journey doubles must implement it.
Описание
Контракт customer auth Web API для headless/Nuxt SSR: introspection
GET /customer/me, реальное продление TTL черезPOST /customer/token/refresh(ротация opaque token, без JWT), bind guest-корзины из валидного Bearer на login/register.Тип изменений
Связанные Issues
Closes #571
Как это было протестировано?
composer test:smoke, PHPUnit lifecycle, PHPStan на затронутых файлах)Конфигурация тестирования:
feat/issue-571-customer-auth-contract←betaNuxt / SSR contract (docs для #571)
Рекомендуемый production path (BFF + Bearer)
Authorization: Bearer <ms3_token>.Same-site cookie path
GET /api/v1/customer/token/get(или auto-mint на cart).credentials: 'include'и точнымms3_cors_allowed_origins.Secure+SameSite=Noneчерез MODXsession_cookie_*(или follow-up settings). Иначе BFF.Запрет
Не хранить API token в
localStorage/sessionStorage.Endpoints
/api/v1/customer/meauthenticated:false)/api/v1/customer/token/refresh/api/v1/customer/login|registerTTL strategy: A (refresh rotate). Sliding TTL не включён. JWT не внедрён. Отдельные
ms3_token_cookie_*settings — out of scope (follow-up).Чеклист
Дополнительные заметки
#334: ложный success-stub не возвращён; тест обновлён под реальный refresh.TokenService(~750 LOC), DI-ключ дляCustomerSessionService, ApachegetallheadersbeyondREDIRECT_HTTP_AUTHORIZATION.