mod_perl базовая аутентификация, $ r-> user () завершается ошибкой - PullRequest
0 голосов
/ 09 сентября 2011

У нас есть проект, который использует mod_perl2 и Мейсон.

Проблема, с которой я сталкиваюсь, заключается в проверке подлинности пользователя с использованием базовой аутентификации apache из .htaccess.

В среде cgi я могу получить это от $ENV{REMOTE_USER}

В mod_perl я должен иметь возможность получить его, используя $r->user(), который, к сожалению, возвращает undef.

Также не повезло с $r->connection->user()

Я также безуспешно пробовал CGI::Apache2::Wrapper, $cgi->remote_user() и $cgi->user_name().

Единственный способ, которым он работает, это вызвать $r->headers_in->get('Authorization'), который возвращает что-то вроде: 'Basic dGhlZHJpdmVyaXM6eGVudXByZQ=='

Любая идея, почему $r->user() не получается? Спасибо

1 Ответ

0 голосов
/ 04 апреля 2012

Я подозреваю, что $r->user() устанавливается только тогда, когда mod_perl2 выполняет аутентификацию, а не когда Apache делает это.

Попробуйте добавить:

my ($res, $sent_pw) = $r->get_basic_auth_pw;

над вызовом $r->user().Это может привести к тому, что модуль декодирует заголовок авторизации.

, или вы можете вручную base64 dcode заголовка авторизации:

my $auth = $r->headers_in->get('Authorization');
my $username = (split(/:/,APR::Base64::decode((split(/ /,$auth))[1])))[0];
...