Перенаправление промежуточного программного обеспечения 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 при входе, а не при выходе?