我们有一个使用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()
失败的原因是什么?
感谢
答案 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];