2011-09-09 51 views
0

我們有一個項目使用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==

任何IDEEA爲什麼$r->user()失敗? 謝謝

+0

你有'的Apache2 :: RequestRec'裝? – friedo

+0

抱歉,延遲,是加載Apache2 :: RequestRec – satmovi

回答

0

我懷疑$r->user()只在mod_perl2進行身份驗證時設置,而不是在Apache執行身份驗證時設置。

嘗試增加:

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

調用$r->user()以上。這可能會觸發模塊解碼授權標頭。

,或者你可以手動的Base64 DCODE Authorization頭:

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