使用 HTTP 403 重定向

Redirect with HTTP 403

我正在使用 Slim PHP 并希望将用户重定向到 /login 如果他们未登录但尝试访问需要用户登录的页面。搜索时关于如何构建我的中间件,我到处都能找到此代码的变体

class Auth{    
    public function requireLogin(Request $request, Response $response, $next){
        if( !isLoggedIn() ) return $response->withRedirect('/login', 403);

        return $next($request, $response);
    }    
}

例如 and this Slim discourse answer.

问题是我无法将重定向和 HTTP 403 结合使用。据我所知,正常的 HTTP 重定向仅限于 HTTP codes 3xx。事实上,上面的代码在与 302.

一起使用时工作正常

我是不是遗漏了什么,或者所有的答案都结合了 withRedirect403 "incorrect"(因为不会导致用户浏览器的实际重定向)?

如果您的应用程序是使用网络浏览器访问的 HTML 网站,则浏览器将仅在状态代码为 3xx 时重定向。

如果您的应用程序是使用 HTTP 客户端访问的 API,那么您有更多的余地。对于 API,您可以使用 403401 状态代码来指示请求无法在未经授权的情况下完成。您还可以包含一个 Location header 来告诉客户去哪里获得授权,但是当然这取决于客户是否跟进 link.