0

我有以下中间件,我将附加到我的路线:

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?

4

0 回答 0