使用 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
.
一起使用时工作正常
我是不是遗漏了什么,或者所有的答案都结合了 withRedirect
和 403
"incorrect"(因为不会导致用户浏览器的实际重定向)?
如果您的应用程序是使用网络浏览器访问的 HTML 网站,则浏览器将仅在状态代码为 3xx
时重定向。
如果您的应用程序是使用 HTTP 客户端访问的 API,那么您有更多的余地。对于 API,您可以使用 403
或 401
状态代码来指示请求无法在未经授权的情况下完成。您还可以包含一个 Location
header 来告诉客户去哪里获得授权,但是当然这取决于客户是否跟进 link.
我正在使用 Slim PHP 并希望将用户重定向到 /login
如果他们未登录但尝试访问需要用户登录的页面。搜索时关于如何构建我的中间件,我到处都能找到此代码的变体
class Auth{
public function requireLogin(Request $request, Response $response, $next){
if( !isLoggedIn() ) return $response->withRedirect('/login', 403);
return $next($request, $response);
}
}
例如
问题是我无法将重定向和 HTTP 403 结合使用。据我所知,正常的 HTTP 重定向仅限于 HTTP codes 3xx。事实上,上面的代码在与 302
.
我是不是遗漏了什么,或者所有的答案都结合了 withRedirect
和 403
"incorrect"(因为不会导致用户浏览器的实际重定向)?
如果您的应用程序是使用网络浏览器访问的 HTML 网站,则浏览器将仅在状态代码为 3xx
时重定向。
如果您的应用程序是使用 HTTP 客户端访问的 API,那么您有更多的余地。对于 API,您可以使用 403
或 401
状态代码来指示请求无法在未经授权的情况下完成。您还可以包含一个 Location
header 来告诉客户去哪里获得授权,但是当然这取决于客户是否跟进 link.