用户未登录时如何设置401状态?

How to set 401 status when user is not logged in?

当我从 ajax 发出请求作为响应时,我需要在用户未登录时发送 401(未授权)状态。

我在 MVC 框架中使用 OOP 概念。 所以我的构造函数如下

function __construct() {
        parent::__construct();

        $request = apache_request_headers();
        if(isset($request['X-Requested-With']) && $request['X-Requested-With'] == 'XMLHttpRequest')
        {
            $this->user = General::getUser(false);
        }
        else
        {
            $this->user = General::getUser();
        }
}

General::getUser(); 在我的另一个 class 中定义,它检查会话和 return 登录用户信息。

现在,当我发出 ajax 请求并且用户未登录时,我想发送 HTTP 状态 401。但是我不能在构造中使用 return。

那么接下来我需要遵循什么程序才能做到这一点。我想从 __construct return 它因为我不希望我在我的调用函数中检查 $this->user 然后回显一些结果。

如果我做错了什么,请提出建议并指出。

最容易做到

header("HTTP/1.1 401 Unauthorized");
exit;
class HomeController {
   function __construct() {
        parent::__construct();

        $request = apache_request_headers();
        if(isset($request['X-Requested-With']) && $request['X-Requested-With'] == 'XMLHttpRequest')
        {
            $this->user = General::getUser(false);
        }
        else
        {
            $this->user = General::getUser();
        }

        Authentication::authorize($this->user);
   }
}

class Authentication {
   public static function authorize($user) {
      if(! $user->isLoggedIn()) {
          Request::unauthorized();
      }

      return true;
   }
}

class Request {
   public static function unauthorized() {
       header("HTTP/1.1 401 Unauthorized");
       die();
   }
}

您还可以在 Request::unauthorized() 中呈现一些视图或执行重定向到身份验证页面。