Ruby: получить зарегистрированного пользователя на windows - PullRequest
5 голосов
/ 15 июля 2010

В C # я могу получить текущего пользователя веб-приложения, используя HttpContext, однако я не могу понять, как это сделать в Ruby.Есть ли способ сделать это?

для тех, кто говорит, что это невозможно, вот доказательство:

http://www.codeproject.com/KB/aspnet/How_to_NT_User_Name.aspx

Ответы [ 6 ]

11 голосов
/ 23 августа 2010

Ну, чтобы получить текущее имя пользователя, есть следующее:

puts ENV['USERNAME']

Или перейдите в Win32API.

require 'dl/win32'

def get_user_name
  api = Win32API.new(
    'advapi32.dll',
    'GetUserName',
    'PP',
    'i'
  )

  buf = "\0" * 512
  len = [512].pack('L')
  api.call(buf,len)

  buf[0..(len.unpack('L')[0])]
end

puts get_user_name

Редактировать: И я идиот.Это совсем не то, что вы просили.О, хорошо, мне потребовалось время, чтобы выкопать это из моего кода, так что он мог бы остаться здесь для всех, кто задается вопросом: P

Править еще раз: ОК, оказывается, я не идиот в конце концов,Это , что вы хотите.Когда я вернулся и перечитал ваш вопрос, HttpContext отбросил меня, и я подумал, что это текущее имя пользователя из HTTP-аутентификации или что-то в этом роде.

1 голос
/ 24 августа 2010

Чтобы получить имя пользователя текущего пользователя на клиентском компьютере, вы можете использовать это

ENV ['USERNAME']

0 голосов
/ 16 июня 2015

[ТОЛЬКО РУБИН НА РЕЙЛАХ]

Это то, что сработало для меня, но есть некоторые ограничения:

Если вас не волнуют эти проблемы, вперед:

  1. В вашем приложении rails добавьте камень Rekado в ваш Gemfile: 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 или проверить учетные данные пользователя.

0 голосов
/ 23 августа 2010

Ваш код на c # работает как плагин .NET на стороне клиента или на стороне сервера? Ваш код ruby ​​будет полностью на стороне сервера. Согласно документации MS, к этой информации действительно могут обращаться только те, кто работает в изолированной программной среде CLR:

http://msdn.microsoft.com/en-us/magazine/cc163700.aspx (в разделе «Определение песочницы»).

Интересно отметить, что сайты, зарегистрированные в LocalIntranet, имеют доступ к этой информации. Однако я не уверен, как это соотносится с зонами безопасности в IE.

Важно понимать, что LOGON_USER НЕ виден в изолированной программной среде браузера больше, чем браузер может видеть содержимое пути к файловой системе в вашей системе. Тот факт, что ваш код на c # видит его почти наверняка, указывает на то, что какой-то клиентский компонент передает его вверх по течению.

У вас есть возможность реализовать mod_ntlm под apache и перенести заголовки вниз по течению. У меня нет очков, чтобы опубликовать вторую ссылку, но Google 'rails ntlm sso' и видит ссылку rayapps.com.

но если ваше приложение не основано на Rails, вам придется перенести его на код вашего сервера. Вы также можете оформить rack-ntlm, если ваше приложение совместимо со стойкой.

0 голосов
/ 20 августа 2010

Я думаю, что вы имеете в виду, как вы можете получить имя пользователя, которое пользователь использовал для входа в веб-приложение. Это будет зависеть от того, какой механизм аутентификации вы используете. Например, некоторые модули проверки подлинности Apache передают REMOTE_USER (например, модуль Kerberos), модуль единой регистрации CAS передает CAS-USER и т. Д. Стандартная дайджест-проверка подлинности, в которой используется заголовок Authentication. Вы должны иметь возможность получить к ним доступ, используя request.env [HEADER], как кто-то другой указал выше. Ознакомьтесь с документацией о том, как ваш уровень аутентификации передает пользователя в HTTP-запросе.

0 голосов
/ 20 августа 2010

Если вы используете Rails, попробуйте: request.env['HTTP_REMOTE_USER']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...