2011-10-05 56 views
1

我環顧四周,找到了一些關於該主題的信息,但無法讓它正常工作。我在我的公司內的web服務器上安裝了apache/tomcat。在編寫CGI應用程序時,我以前在同一個Web服務器上,通過訪問環境變量REMOTE_USER,我成功地獲得了我網站上訪問者的用戶名。現在我騎在軌道上,變量request.env ['REMOTE_USER']什麼也不返回。Rails - 獲取remote_user從apache返回用戶名

請注意,我沒有運行許多在線討論中假設的Mongrel。另外,我不打算建立一個認證系統,我只是想讀入(使用REMOTE_USER)訪問我的網站的人的用戶名。

我知道我需要調整我的.htaccess(位於我的公用文件夾)文件以將這些信息從Apache轉發到我的應用程序中。通過查看網絡上的示例,我確實將其更改爲..

RewriteCond %{REMOTE_USER} (.+) 
RewriteRule ^.*$ - [E=RU:%1] 
RequestHeader add X-Forwarded-User %{RU}e 

..但這沒有幫助。謝謝。

回答

2

如果添加X-Forwarded-User,則必須讀取request.headers ['X-Forwarded-User']而不是request.env ['REMOTE_USER']。

將它放在下面的文件中,並使用http_remote_user而不是request.env哈希。

# app/controllers/application_controller.rb 
class ApplicationController < ActionController::Base 
    def http_remote_user 
    request.env['HTTP_REMOTE_USER'] || request.headers['X-Forwarded-User'] 
    end 
    helper_method :http_remote_user 
end 
+0

感謝您取回@squarsim。在我的應用程序控制器中粘貼了代碼,並在我的視圖中嘗試打印<%= http_remote_user%>和<%= request.headers ['X-Forwarded-User']%> ..still空白。也許我需要在我的.htaccess中添加/更改某些內容? – absolutskyy

+0

打印出<%= request.headers%>,這將成爲可以使用的完整的標題欄集合,如果你沒有看到它,那麼在apache方面缺少一些東西。 – squarism

+0

打印request.headers並獲得信息的頁面加載。 REMOTE_USER從輸出中丟失。這是否意味着我需要從Apache端啓用? – absolutskyy

0

我一直在努力,但終於搞定了。

  1. 請務必記得添加RewriteEngine On到conf文件(對我來說這是VirtualHost段內),我忘了,它靜靜地失敗了,重啓動Apache時沒有錯誤。

  2. 根據您使用.htaccess還是.conf文件,您需要更改RewriteCond規則。 esoteric details - note 5表示我們需要使用RewriteCond %{LA-U:REMOTE_USER} (.+),如果我們在conf文件中。

  3. 爲了幫助調試,您始終可以使用RequestHeader add X-Forwarded-User 'FixedValue'開始,以確保問題是apache而不是rails或其他中間體。