Как вы получаете текущий пользователь вошел в царство Apache? - PullRequest
3 голосов
/ 16 ноября 2009

Я пишу простой внутренний интерфейс для Subversion. У нас есть настройка Apache для обслуживания SVN-репозиториев благодаря WebDAV. Кроме того, аутентификация выполняется через область Apache и Open Directory. Что бы это ни стоило, это в основном довольно милая установка Mac OS X Server 10.6.

Теперь, некоторые задачи, за которые отвечает наш интерфейс, должны знать имя пользователя, вызывающего действие. Например, для создания репозитория это необходимо, чтобы мы могли получить надлежащие журналы того, кто на самом деле его создал. Если я не предоставляю эту информацию, SVN просто использует процесс, который ее создал, в нашем случае это пользователь httpd.

Я делаю это в php, но мне не обязательно реализовывать это с помощью php. Если я могу получить информацию в сценарии оболочки, это тоже хорошо. Важно то, что я каким-то образом получаю информацию. Первое разработанное мной решение, которое, как я предполагал, сработало, поскольку оно правильно сообщило мое имя пользователя, просто вызывает:

get_current_user();

Однако, похоже, всегда возвращает мое имя пользователя, даже если какой-то другой пользователь запускает действие при входе в область. Есть ли способ получить правильного пользователя?


РЕДАКТИРОВАТЬ: Возможно, я был слишком быстр, чтобы прыгнуть пистолет здесь. Похоже, что первая переменная не устанавливается через определенное время. Тем не менее, пользователь все еще вошел в систему, так как нет запроса на вход. Таким образом, предложенное ниже решение на самом деле не применимо.


Теперь я чувствую себя как идёт. Этот простой фрагмент работал (хотя его было трудно найти):

$username = $_SERVER["PHP_AUTH_USER"];

Однако это не так:

$username = apache_getenv("REMOTE_USER");

Кто-нибудь понял, почему последний не работает? Единственные документы, которые я смог найти, предполагают, что это работает только на Apache 2. Однако на самом деле я использую Apache 2, так что это не могло быть.

1 Ответ

4 голосов
/ 16 ноября 2009

Итак, после долгого поиска в Google я понял, что метод получения имени пользователя менялся практически при каждой версии PHP. Текущее решение, которое кажется единственным, состоит в том, чтобы получить данные из следующей переменной:

$_SERVER['REMOTE_USER'];

Однако эта переменная может быть или не быть установлена. Причина, по которой я, вероятно, правильно видел информацию, заключалась в том, что информация была отправлена ​​в заголовках, когда я вошел в область, а затем посетил скрипт PHP, который находился за пределами указанной области. Информация поступила, но она не была достоверной.

Документы Apache 1007 * на самом деле говорят вам об этом в стиле "О, кстати". Я не уверен, переносится ли аутентификация между несколькими сферами на одном хосте, но в любом случае это решило проблему.

...