我正在使用Slim PHP,并希望将用户重定向到/login
,如果他们没有登录,但试图访问一个页面,需要一个用户登录。在搜索如何构建我的中间件时,我发现到处都是这些代码的变体
class Auth{
public function requireLogin(Request $request, Response $response, $next){
if( !isLoggedIn() ) return $response->withRedirect('/login', 403);
return $next($request, $response);
}
}
例如在this SO answer和this Slim discourse answer中。
问题是我不能让重定向和HTTP403的组合工作。据我所知,普通的HTTP重定向仅限于HTTP codes 3xx。实际上,上面的代码在与例如302
一起使用时工作得很好。
是我漏掉了什么,还是所有结合了withRedirect
和403
的答案都是“不正确的”(就像不会导致用户浏览器的实际重定向一样)?
发布于 2020-01-14 23:16:42
如果您的应用程序是一个使用web浏览器访问的超文本标记语言网站,那么浏览器只有在状态代码为3xx
代码时才会重定向。
如果您的应用程序是使用HTTP客户端访问的API,那么您有更多的回旋余地。对于应用编程接口,您可以使用403
或401
状态代码来指示请求在未经授权的情况下无法满足。您还可以包含一个Location
头来告诉客户端到哪里去获取授权,但当然,这取决于客户端是否跟进该链接。
https://stackoverflow.com/questions/59647524
复制相似问题