Всегда возвращает код состояния 200

Я возвращаю ответ от onBootStrap() таким образом..

 $app = $e->getApplication();

           $em->attach(MvcEvent::EVENT_ROUTE, function($e) use ($app) {

              $response = $e->getResponse();
                $response->setStatusCode(403);

                $jsonValue = json_encode(array(
                   'error'   => 12345,
                   'message' => 'You are not authorized for this request',
                ));


                $response->setContent($jsonValue);

                return $response;

        }, PHP_INT_MAX);

Но проблема в том, что я получаю код состояния 200, даже если я передаю другие.

Я использую этот API из клиента Advanced rest API.

1 ответ

Решение

До: Вам нужно прервать нормальный ход обработки запроса. Смотрите модуль BjyAuthorize. Он генерирует ошибку: https://github.com/bjyoungblood/BjyAuthorize/blob/master/src/BjyAuthorize/Guard/Route.php Здесь он обрабатывается: https://github.com/bjyoungblood/BjyAuthorize/blob/master/src/BjyAuthorize/View/UnauthorizedStrategy.php

В методе onBootstrap вы можете добавить прослушиватель для события MvcEvent::EVENT_DISPATCH_ERROR. Он проверит, является ли ошибка ошибкой аутентификации и нужно ли установить код состояния ответа и его содержимое. Код авторизации вызовет событие MvcEvent:: EVENT_DISPATCH_ERROR и установит "ошибку события" $event->setError(static::ERROR)

После: это не лучший вопрос, не лучший ответ. Лучший ответ будет "использовать стандартные модули". Тем не менее, существует такая вещь, как "предельная сложность системы". Признаком того, что система достигла предела сложности, является то, что пользователям легче писать собственный код, а не использовать стандарт. Однако существует объективная и субъективная сложность. Цель - стандартные модули не очень сложны. Тем не менее, они не документированы в лучшем виде. Поэтому я считаю, что мой ответ направлен на то, чтобы снизить сложность для вас субъективной стандартной системы, в данном случае - модуля BjyAuthorize. Вы можете указать свою собственную стратегию следующим образом: 'unauthorized_strategy' => 'MyModule\Listener\UnauthorizedStrategy'

Другие вопросы по тегам