我有以下中间件,我将附加到我的路线:
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 中,我只有请求 $handler 才能访问应用程序,然后我才开始使用 $response 来决定是否要重定向到 /login。
如何在进入而不是退出时返回重定向 $response?