Rails获取当前登录的Windows用户的用户名

我需要获取当前登录的Windows用户的用户名。 可以轻松完成吗?

运行脚本的帐户的用户名可以通过以下方式访问:

puts ENV['USERNAME']

请注意,如果您将其作为系统服务运行,用户名可能会以“SYSTEM”身份返回

如果这还不足以满足您的需求,可以使用此处概述的替代方法: https : //stackoverflow.com/a/3544741/648695

您可以使用Ruby etc模块

 require 'etc' Etc.getlogin 

该文档可在此处获取: http : //ruby-doc.org/stdlib-2.0.0/libdoc/etc/rdoc/Etc.html#method-c-getlogin

返回当前登录用户的短用户名。

据我所知,除非你使用的是需要微软框架网站的活动目录,否则我认为你不会在rails中找到方法。

这里有一些讨论点可能有所帮助: 你能用PHP获得一个Windows(AD)用户名吗?

同样的问题: 有没有办法在rails上使用ruby读取客户端Windows登录名

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


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

  • 不适用于Chrome: undefined method 'encode' for nil:NilClass
  • 不会validation用户凭据

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

  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上运行或validation用户凭据,请告诉我们。