Как установить статус 401, когда пользователь не вошел в систему?

Когда я делаю запрос от ajax в ответ, мне нужно отправить статус 401 (не авторизован), когда пользователь не вошел в систему.

Я использую концепции ООП с 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 in construct.

Так что за следующей процедурой мне нужно следовать, чтобы сделать это. Я хочу вернуть его из __construct потому что я не хочу, чтобы я проверял $this->user в моей вызывающей функции, а затем повторить некоторый результат.

Пожалуйста, предложите и скажите, если я делаю что-то не так.

2 ответа

Решение
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() или выполнить перенаправление на страницу аутентификации.

Это будет проще всего сделать

header("HTTP/1.1 401 Unauthorized");
exit;
Другие вопросы по тегам