如何在NodeJS中获取操作系统用户名?

57

如何使用NodeJS获取/查找计算机所有者当前正在使用的用户名(登录状态),请问?

我已经做了一些搜索,但是没有发现相关内容。

8个回答

109

我不确定为什么,但有人添加了一个答案,然后很快就删除了...不过我反应够快,检查后发现这是以前提问的最短、最有效的方法:

require("os").userInfo().username

唯一的问题是,在Windows 10中,它返回已使用的所有者账户的名字(只是提醒一下)。 其他一切都完全正常!


3
我这样做是因为该功能仅适用于Node.js的v7版本,而且这是一个新功能,可能电子应用无法使用。如果可以使用,那就很好! - corn3lius
不正确,节点在服务器端执行,因此它将提供有关服务器的信息,而不是客户端。 - Kevin Grosgojat
2
他在哪里提到他需要客户端登录?Node.js是服务器端代码吗? - corn3lius
我该如何找到当前计算机所有者正在使用的用户名 - Kevin Grosgojat
1
好的,我明白了,没有看到电子标签。我们不是在Web上下文中,而是在一个重客户端上下文中。没问题。 - Kevin Grosgojat
是的,抱歉。我在实际问题中忘记提到了,但我正在开发一个聊天客户端,它将使用操作系统的用户名作为其用户名... - drowZ

24

你将获得这个对象的用户名:

let os = require('os')
console.log(os.userInfo());

5
这将为您提供服务器的主机名,而不是客户端的。 - Kevin Grosgojat
6
实际上,你应该使用const os = require('os');,因为os是一个不可变变量。 - Griffin

16

process.env.USER应该至少在MAC或Linux中也能工作。例如:


let user = process.env.USER || ""

3
毫无疑问,最简单的方法是使用username来实现。

安装:

$ npm install username

然后:

const username = require('username');

(async () => {
    console.log(await username());
    //=> 'current_username'
})();

嗨@carlos,我已经实现了相同的内容,并尝试将此代码添加到一个GET REST API中。我正在尝试将username()函数的响应附加到response.send()方法,但它没有返回。请找到我正在尝试的代码如下: var user = (async () => { await username(); })(); res.status(200).send({ success: 'true', message: user }); - Kishore Konangi
请忽略我上面的评论,问题已经解决。 嗨@carlos, 当我尝试将相同的代码移动到Linux服务器并使用GET rest api时,我从客户端机器进行访问。我得到了Linux服务器用户,但没有访问该URL的客户端用户。在我的Windows机器上运行应用程序时,它可以正常工作。 有关此事的任何帮助吗? - Kishore Konangi
1
@kishoreaoe 这个模块基本上会返回已登录的用户(在这种情况下是服务器用户),你需要围绕它来找出这个模块如何帮助你获取客户端用户,可能不会因为它会得到您的根或已登录用户名。 - Abraham
2
仅仅使用随机的第三方模块来完成所有事情并不是一个好习惯。 - Ian Smith

2

无依赖方法:

function getUsername() {
    return (
        process.env.SUDO_USER ||
        process.env.C9_USER ||
        process.env.LOGNAME ||
        process.env.USER ||
        process.env.LNAME ||
        process.env.USERNAME
    );
}

0

你可以简单地使用

app.getPath('home')

它将返回当前用户的主目录路径。


我在Ubuntu上使用这个,它运行良好。不确定为什么会有负评。/home/<username> const home = app.getPath('home'); - beeeliu
人们可能给这个帖子投反对票的原因包括:(1)假设使用了electron[虽然OP确实包含了electron标签]和(2)这并没有返回用户信息,而是用户的主目录,这可能有关系,但不是一样的。 Node内置的os.userInfoos.homedir 更适合 OP 实际所要求的。 - jacobq

-1
如果不需要跨操作系统(只是基于*nix),您可以采用以下方法(请记住,如果您对其进行参数化,则使用exec可能存在潜在风险):
const Promise = require( 'bluebird' ),
      exec    = Promise.promisify( require( 'child_process' ).exec );

exec( 'id -un' ).then( ( username )=> {
 // do something about it
});

如果你想在编程中使用bluebird库来进行异步编程,请别忘记执行以下命令安装: npm install bluebird --save

请查看userid(由我维护)。它可以在不产生额外进程的情况下完成此操作。 - Cameron Tacklind

-8

5
这与原帖问题完全无关。 - Harold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接