【问题标题】:Node.Js - Get windows usernameNode.Js - 获取 Windows 用户名
【发布时间】:2015-01-12 04:02:21
【问题描述】:

我正在尝试获取运行我的 node.jS 应用程序的机器的 Windows 用户名(该应用程序始终在 Windows 机器上运行)。

如何使用 Node.Js 获取当前的 windows 用户名?

我正在尝试在 C# 中为 node.js 找到类似于 WindowsIdentity.GetCurrent().Name 的内容,或在 CMD 中找到类似于 whoamI 命令的内容。

【问题讨论】:

  • 当您使用术语“windows”指操作系统时,这里并不清楚。
  • 当前 Windows 用户名不是您想要的(即运行服务器进程的用户)。您需要 NTLM 身份验证。
  • 从Nodejs v6开始,可以使用os.userInfo().usernameos.userInfo

标签: node.js active-directory


【解决方案1】:

从 Node v6 (2016-04) 开始,您可以使用 os.userInfo

var os = require('os');
os.userInfo().username

获取当前登录的用户名:

var path = require('path');
var userName = process.env['USERPROFILE'].split(path.sep)[2];
var loginId = path.join("domainName",userName);
console.log(loginId);

【讨论】:

  • 在 linux 下对我不起作用,但我可以在 process.env.USER 下找到用户
  • Win7下对我来说是“域名”
  • 我能够从 process.env.USERDOMAIN process.env.USERNAME 获得
  • 感谢 afreeland!我使用了 process.env.USERNAME 并且能够在不需要路径的情况下使用用户名。
  • 我们可以在 react 应用中使用相同的吗?
【解决方案2】:

我知道这不会像 OP 所要求的那样给 Web 应用程序的客户端用户,但是在本地运行 Node 应用程序时尝试获取登录用户的搜索结果中,这个问题非常高。

您可以在 Windows 中使用环境变量重现 whoamIWindowsIdentity.GetCurrent()<domain>\<username> 输出。

process.env.USERDOMAIN + '\\' + process.env.USERNAME

如果您更愿意使用USERPROFILE

process.env.USERDOMAIN + '\\' + process.env.USERPROFILE.split('\\').pop()

【讨论】:

    【解决方案3】:

    虽然 node 具有内置的操作系统函数 osos.hostname() 来返回主机名,但您需要在 ASP.NET 或您选择的语言中访问客户端的主机名。你不能在节点中这样做,因为它是在服务器端运行的,与客户端的本地信息无关。

    > require('os')
    > os.hostname()
    

    看看这个问题

    Determine Client's Computer Name

    在 ASP.NET AKA 客户端中获取客户端主机名

    System.Net.Dns.GetHostEntry( Request.ServerVariables["REMOTE_HOST"]).HostName;

    懒惰的勺子饲料

    string IP = Request.UserHostName;
    string compName = CompNameHelper.DetermineCompName(IP);
    
    code from compnamehelper:
    
    public static string DetermineCompName(string IP)
        {
            IPAddress myIP = IPAddress.Parse(IP);
            IPHostEntry GetIPHost = Dns.GetHostEntry(myIP);
            List<string> compName = GetIPHost.HostName.ToString().Split('.').ToList();
            return compName.First();
        }
    

    MICROSOFT DOCUMENTATION

    【讨论】:

    • 投了反对票,因为您似乎忽略了所要求的内容。他正在寻找当前用户的用户名。
    • 删除了反对票。我以为他会让他的客户运行节点......我似乎不明白他想要的用例。
    • 感谢您的回复,但是 Os.hostname 返回的是计算机名称,而不是 Active Directory 中的用户 ID。
    【解决方案4】:

    有人创建了一个名为 username 的模块,它可以为您完成所有繁重的工作。

    你使用它就像

    var username = require('username');
    
    console.log( username.sync() );
    

    【讨论】:

    • 这听起来不太适合未来,也不像使用别人的模块那么简单。
    【解决方案5】:

    我相信您是在说您有一个 Asp.NET 应用程序,并且想使用 Node.js 来确定当前用户的用户名,然后将其提交给您的 Asp.NET 应用程序。

    虽然来自this question,但我不是在 Windows 上开发的,我相信这可能存储为环境变量。 process.env 是环境变量的 javascript 映射/字典,可能包含用户用户名。

    或者,您可以从用户主目录中解析它:

    var path = require('path'); var username = path.sep(process.env['USERPROFILE'])[2];

    我上面链接的问题暗示USERPROFILE 解析为C:\Users\USERNAME\。然后我拆分路径并采用第三个元素,即用户名。

    同样,我没有 Windows 机器,无法确认这一点。希望这能让你走上正确的道路。

    干杯。

    【讨论】:

      【解决方案6】:

      从 Node v6 (2016-04) 开始,您可以只使用 os.userInfo :

      获取当前登录的用户名:

      var path = require('path');
      var userName = process.env['USERPROFILE'].split(path.sep)[2];
      var loginId = path.join("domainName",userName);
      console.log(loginId);
      

      一旦我们从上面的代码中获取用户名。我们无法通过客户端点击这个用户名 api。它显示这个方法的 401 res

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-05
        • 1970-01-01
        • 2015-05-27
        • 1970-01-01
        • 1970-01-01
        • 2014-04-06
        • 1970-01-01
        相关资源
        最近更新 更多