有没有一种方法来读取一个客户端的Windowslogin名在轨道上使用ruby

我已经在运行在Windows上的Ruby on Rails上构build了一个Intranet应用程序。 每个将访问此应用程序的人都在Windows上运行,并且已经通过Windowslogin到networking中。

我需要做的就是获取login用户的login名并将该login名保存到会话variables中。 我试过ENV ['USERNAME'],但是只显示login到服务器的人,这就是我。

有没有办法从访问网站的用户中自动获取和存储这个variables? 我知道我可以问他们,但我认为一定有办法抓住它。

谢谢…克里斯

Solutions Collecting From Web of "有没有一种方法来读取一个客户端的Windowslogin名在轨道上使用ruby"

不,您将需要在您的Rails应用程序中设置身份验证系统。 访问客户端环境将成为诸如浏览器之类的许多系统中的一个巨大的安全漏洞。 根据您的要求,有一些很好的插件来处理所有的身份验证。 我个人喜欢设计 。 有几个插件,如果你不希望存储用户名/密码,并让用户为你的Intranet应用程序维护一套单独的登录凭证,那么它将使用LDAP服务器进行验证。 然而,这是非常普遍的。

这个网站有一个声称的答案,但它只是IE浏览器。 而由于浏览器真的不应该使这种信息,这可能已经从新版本的IE中删除。 这个帖子从2008年底开始,所以…

尽管我讨厌IE和平台依赖性,但是如果你只是停留在一个仅限Windows的公司内部网上,这可能是一条可行的路。

希望这可以帮助!

PS:如果人们只是通过他们的工作机器访问你的应用程序,那么使用MAC /本地(桌面)IP地址呢? MAC会更可靠,当然,但也只有IE …

同样的问题在这里: Rails获取当前记录的Windows用户的用户名

无论如何,只是复制我自己的答案在下面…


这是对我有用,但有一些限制:

  • 将无法在Chrome中工作: undefined method 'encode' for nil:NilClass
  • 将不验证用户凭证

如果您不关心这些问题,请继续:

  1. 在您的Rails应用程序中,将Rekado的gem添加到您的Gemfile:gem'ntlm gem 'ntlm-sso', '=0.0.1'

  2. 创建一个初始化config/initializers/ntlm-sso.rb与:

     require 'rack' require 'rack/auth/ntlm-sso' class NTLMAuthentication def initialize(app) @app = app end def call(env) auth = Rack::Auth::NTLMSSO.new(@app) return auth.call(env) end end 
  3. 在您的application.rb文件中,添加以下行: config.middleware.use "NTLMAuthentication"

  4. 在视图或控制器上调用request.env["REMOTE_USER"]以获得当前用户名。

PS:让我知道如果你发现无论如何,使其在Chrome上工作或验证用户凭据。