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

时间:2011-09-09 12:26:17

标签: perl mod-perl

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

我面临的问题是使用来自.htaccess的apache basic auth对用户进行身份验证。

在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 :(得分:0)

我怀疑$r->user()仅在mod_perl2进行身份验证时设置,而不是在apache执行时设置。

尝试添加:

my ($res, $sent_pw) = $r->get_basic_auth_pw;
$r->user()的号码之上

。这可能会触发模块解码Authorization标头。

或者,你可以手动base64编码授权标题:

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