fix(web-api): CORS preflight OPTIONS до CorsMiddleware - #637
Conversation
|
Этот PR включён в тестовую интеграционную сборку всех открытых PR MiniShop3: AgelxNash/MiniShop3, ветка Сборка нужна, чтобы проверить совместимость взаимозависимых серий PR до их мержа — при последовательном слиянии они конфликтуют друг с другом. Это не ревью и не конкурирующий PR: авторство сохранено (1 PR = 1 коммит с исходным автором), ветка пересобирается по мере обновления PR. Как вошёл в сборку: Слился чисто. |
|
Отличная работа! Желаю этому PR быстрого мержа и ни одного конфликта 🙌 |
|
Диагноз верный, проверил по коду: до правки ни один роут в Локальный прогон на ветке, смерженной с актуальной Хардненинг 1.13.0 не откачен — Но просьба доработать одну вещь, прежде чем вливать.
|
f95768f to
bc8c970
Compare
|
Адрес ревью:
Rebase на актуальную 403 на disallowed Origin и выбор |
|
Первая половина фикса подтверждена независимо — собрал сценарий сам, не полагаясь на твой тест: паттерн из Числа после мержа с актуальной Но защита оказалась неполной, и это следствие моей формулировки в прошлом возврате. Гейт проверяет наличие
|
Router обрабатывает OPTIONS на известных storefront-путях через middleware без вызова handler. CorsMiddleware возвращает Response 200 вместо exit. Closes #634
Do not run the middleware stack on OPTIONS unless CorsMiddleware is present, so TokenMiddleware cannot mint tokens on addon-style routes.
Preflight must not create API state when CorsMiddleware is not first. Short-circuit TokenMiddleware and RateLimitMiddleware on OPTIONS and cover reversed middleware order in the CORS router test.
|
Спасибо — формулировка «наличие CorsMiddleware» действительно оставляла дыру при обратном порядке. Сделано после rebase на актуальную
Прогон: Готово к повторному ревью. |
bc8c970 to
fad9602
Compare
Описание
Браузерный CORS preflight (
OPTIONS) к Web API получал 405Method not allowed: FastRoute отдавалMETHOD_NOT_ALLOWEDдо запуска group middleware, иCorsMiddlewareне успевал ответить.Теперь
Router::dispatch()наOPTIONSдля известных storefront-путей (/api/v1/*) прогоняет только middleware найденного маршрута. Handler не вызывается — preflight не триггерит POST/GET side effects.CorsMiddlewareвозвращаетResponse200 вместоexit, чтобы Router и PHPUnit могли обработать ответ.Closes #634
Тип изменений
Связанные Issues
Closes #634
Как это было протестировано?
Добавлены
HeadlessStorefrontCorsRouterTest: OPTIONS на/api/v1/health, POST-only/api/v1/cart/add, неизвестный path → 404, handler не вызывается без CorsMiddleware.composer ci:php)Конфигурация тестирования:
Чеклист
Дополнительные заметки
Кастомные роуты в
ms3.routes.d/webбезCorsMiddlewareпо-прежнему получат 405 на OPTIONS (handler не выполняется). Для headless-витрины аддон должен вешать тот же CORS stack, что иweb.php.