0

我试图在未通过身份验证时将用户重定向到登录页面。我在 Slim3 中使用中间件来检查 Sentinel。有效,但我需要覆盖正文以不显示内容。例如,我可以使用 CURL 访问 /users 之类的路由,然后我可以获取所有页面。因此,如果用户未通过身份验证,我需要删除/覆盖正文。

public function __invoke(RequestInterface $request, ResponseInterface $response, callable $next)
{

    $route = parse_url($request->getUri(), PHP_URL_PATH);

    if ($route !== '/login' && ! $user = Sentinel::check() )
    {
        $response = $response
            ->withStatus(301)
            ->withHeader("location", '/login')
        ;
    }
    return $next($request, $response);

}
4

1 回答 1

1

如果您只想重定向用户,则不应调用 $next 回调:

public function __invoke(RequestInterface $request, ResponseInterface $response, callable $next)
{
    $route = parse_url($request->getUri(), PHP_URL_PATH);

    if ($route !== '/login' && ! $user = Sentinel::check() )
    {
        return $response
            ->withHeader('Location', '/login')
            ->withStatus(302);
    }

    return $next($request, $response);
}
于 2018-11-17T14:04:42.563 回答