Перенаправление промежуточного ПО Slim 4 * на пути в *

У меня есть следующее промежуточное ПО, которое я прикреплю к своему маршруту:

class RequireAuth extends Base
{
    public function __invoke(Request $request, RequestHandler $handler): Response
    {
        // On my way in, get authenticated user...

        // I want to decide whether to redirect the response now, but i don't have 
        // the response object yet like I did in Slim 3.

        // So, get the response instance from handler
        $response = $handler->handle($request);

        // Now on my way out... and too late to decide whether to redirect to /login
        if ($user) {
            return $response;
        } else {
            return $response
                ->withHeader('Location', '/login')
                ->withStatus(302);
        }


    }
}

Теперь это редирект работает. Однако, похоже, он перенаправляется после нажатия на приложение и на выходе. Я могу подтвердить это, поместив die('hello'); в свой контроллер. Если пользователь не аутентифицирован, он не должен заходить так далеко, поскольку перенаправление должно быть подключено по пути. Но контроллер вызывается, даже если я не аутентифицирован. Это плохо. В Slim 3 у меня был доступ к объекту $ response, и я мог передать его через обработчик $ next. Но похоже, что в Slim 4 у меня есть только обработчик запроса $, который будет попадать в приложение, прежде чем я получу ответ $, чтобы решить, хочу ли я, например, перенаправить на / login.

Как я могу вернуть перенаправляющий $ response при входе, а не при выходе?


person Martyn    schedule 11.02.2020    source источник
comment
Да, думаю, да. И это очень хорошо объяснено, поскольку я подумывал просто вернуться к Slim 3, если не смогу это понять :) Новая реализация промежуточного программного обеспечения теперь имеет немного больше смысла. Спасибо за ваше время.   -  person Martyn    schedule 12.02.2020