Как установить статус 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 в конструкции.

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

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

0

Решение

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

1

Другие решения

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

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

По вопросам рекламы [email protected]