【发布时间】:2020-01-08 14:01:54
【问题描述】:
我正在使用 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。
问题是我无法将重定向和 HTTP 403 结合使用。据我所知,正常的 HTTP 重定向仅限于 HTTP codes 3xx。实际上,上面的代码在与 302 一起使用时可以正常工作。
我是否遗漏了什么,或者所有结合 withRedirect 和 403 的答案“不正确”(因为不会导致用户浏览器的实际重定向)?
【问题讨论】:
-
403 特别是 Forbidden 它根本不是重定向标头...我认为您最好亲自做一个或另一个;例如您可以 302到登录失败页面。
-
这是你会在 API 中看到的那种东西,API 会返回 403(实际上更多的是 401)然后前端会捕捉到这个错误,通过将你重定向到登录来处理它页。在您的情况下,由于是 PHP 重定向它,您可以抛出异常并在错误处理程序中捕获它,但您不会看到 403 错误。在你的情况下你有点不需要它。
-
作为 403 和 401 之间的说明。403 错误代码表示身份验证成功,但用户缺少执行操作所需的权限。 401 仅表示访问此页面或此操作需要身份验证。在你的情况下,我认为 401 错误会更合适。
-
这个其他问题似乎相关stackoverflow.com/questions/2839585/…
标签: php slim http-status-code-403 http-redirect slim-3