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

时间:2015-05-08 11:24:28

标签: php ajax oop construct

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

我正在使用OOP Concepts和MVC Framework。 所以我的构造函数遵循

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();在我的另一个类中定义,它检查会话并返回登录用户信息。

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

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

请建议并告诉我是否做错了。

2 个答案:

答案 0 :(得分:1)

最容易做到

header("HTTP/1.1 401 Unauthorized");
exit;

答案 1 :(得分:1)

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()或perfom重定向到身份验证页面中呈现一些视图。