Ruby on rails Rails-让远程用户从apache返回用户名

Ruby on rails Rails-让远程用户从apache返回用户名,ruby-on-rails,apache,Ruby On Rails,Apache,我环顾了很多地方,确实找到了一些关于这个话题的信息,但没能让它发挥作用。我在公司的Web服务器上安装了apache/tomcat。以前在同一个Web服务器上,当我编写CGI应用程序时,通过访问environment var REMOTE_USER,我成功地获得了网站访问者的用户名。现在我使用rails,变量request.env['REMOTE_USER']不返回任何内容 请注意,我不是运行许多在线讨论假设的Mongrel。另外,我并不想构建一个身份验证系统,我只是想读入(使用远程用户)访问我的

我环顾了很多地方,确实找到了一些关于这个话题的信息,但没能让它发挥作用。我在公司的Web服务器上安装了apache/tomcat。以前在同一个Web服务器上,当我编写CGI应用程序时,通过访问environment var REMOTE_USER,我成功地获得了网站访问者的用户名。现在我使用rails,变量request.env['REMOTE_USER']不返回任何内容

请注意,我不是运行许多在线讨论假设的Mongrel。另外,我并不想构建一个身份验证系统,我只是想读入(使用远程用户)访问我的站点的用户的用户名

我知道我需要调整我的.htaccess(位于我的公用文件夹中)文件,以便将这些信息从apache转发到我的应用程序中。通过查看web上的示例,我确实将其更改为

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

…但这没用。谢谢。

如果添加X-Forwarded-User,则必须读取request.headers['X-Forwarded-User'],而不是request.env['REMOTE\u 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
#app/controllers/application_controller.rb
类ApplicationController
我努力解决这个问题,但最终还是成功了

  • 请确保您记得将
    RewriteEngine On
    添加到conf文件中(对我来说,它位于
    VirtualHost
    部分),我忘记了,它以静默方式失败,重新启动apache时没有错误

  • 根据使用的是.htaccess还是.conf文件,您需要更改RewriteCond规则。如果我们在conf文件中,我们需要使用
    RewriteCond%{LA-U:REMOTE_USER}(+)

  • 为了帮助调试,您可以始终使用
    RequestHeader add X-Forwarded-User'FixedValue'
    开始,以确保问题不是apache rails或其他中间产品


  • 谢谢你回来@squarsim。将代码粘贴到我的应用程序控制器中,在我看来,我尝试了打印这两个代码,但仍然得到了空白。也许我需要在我的.htaccess?打印输出中添加/更改一些内容,这将是rails可以使用的完整标题集,如果您没有看到,则apache端缺少一些内容。Printed request.headers并获得了一页信息。但输出中缺少远程用户。这是否意味着我需要从Apache端启用?如果Apache看到REMOTE_USER=bob,而您在request.headers中的任何位置都看不到bob,那么Apache不会转发任何内容,rails对此也无能为力。是的,我会玩.htaccess文件。