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用户凭据
如果您不关心这些问题,请继续:
-
在rails应用程序中,将Rekado的gem添加到Gemfile:gem’ntlm
gem 'ntlm-sso', '=0.0.1'
-
使用以下命令创建初始化
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
-
在您的
application.rb
文件中,添加以下行:config.middleware.use "NTLMAuthentication"
-
在您的视图或控制器上调用
request.env["REMOTE_USER"]
以获取当前用户名。
PS:如果您发现无论如何都要在Chrome上运行或validation用户凭据,请告诉我们。