mod_perl basic auth,$r->;user()失败

mod_perl basic auth,$r->;user()失败,perl,mod-perl,Perl,Mod Perl,我们有一个项目使用了mod_perl2和mason 我面临的问题是使用apachebasic auth从.htaccess对用户进行身份验证 在cgi环境中,我可以从$ENV{REMOTE\u USER} 在mod_perl中,我应该能够使用$r->user()获得它,不幸的是,它返回了undf $r->connection->user()也没有什么好运气 我还尝试了CGI::Apache2::Wrapper,$CGI->remote\u user()和$CGI->user\u name(),但

我们有一个项目使用了
mod_perl2
和mason

我面临的问题是使用apachebasic auth从.htaccess对用户进行身份验证

在cgi环境中,我可以从
$ENV{REMOTE\u USER}

在mod_perl中,我应该能够使用
$r->user()
获得它,不幸的是,它返回了undf

$r->connection->user()也没有什么好运气

我还尝试了
CGI::Apache2::Wrapper
$CGI->remote\u user()
$CGI->user\u name()
,但没有成功

它工作的唯一方法是调用
$r->headers\u in->get('Authorization')
,它返回类似以下内容:“
基本dGhlZHJpdmVyaXM6eGVudXByZQ==

你知道为什么
$r->user()
失败了吗?
谢谢我怀疑
$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];

您是否加载了
Apache2::RequestRec
?很抱歉延迟,是的,已加载Apache2::RequestRec