Javascript 如何检查数据库是否需要身份验证
我正在做一个允许用户登录mongodb数据库的项目。基本上我有Javascript 如何检查数据库是否需要身份验证,javascript,node.js,mongodb,mongodb-query,Javascript,Node.js,Mongodb,Mongodb Query,我正在做一个允许用户登录mongodb数据库的项目。基本上我有 db.authenticate(username, password, function(err, isAuthPass) {...} 检查用户是否通过身份验证。但是,有时服务器不需要身份验证。如果我提供用户名/密码,它将失败。所以我需要知道如何使用mongo本地客户端检查身份验证模式。有什么想法吗?有时候?始终使用密码。如果您不需要,比如您的本地环境,那么您应该为该环境使用一个配置文件,比如/config/dev.js,它具有该
db.authenticate(username, password, function(err, isAuthPass) {...}
检查用户是否通过身份验证。但是,有时服务器不需要身份验证。如果我提供用户名/密码,它将失败。所以我需要知道如何使用mongo本地客户端检查身份验证模式。有什么想法吗?有时候?始终使用密码。如果您不需要,比如您的本地环境,那么您应该为该环境使用一个配置文件,比如
/config/dev.js
,它具有该环境的凭据。我想您可以查询数据库中的配置信息。这需要注意的是,您还应该使用前面讨论过的“测试/失败”方法,因为您无法从未在本地主机上运行的已启用身份验证的服务器获取此信息:
var mongo = require('mongodb'),
MongoClient = mongo.MongoClient;
MongoClient.connect('mongodb://localhost:30000/test',function(err,db) {
var adminDb = db.admin();
adminDb.command({ "getCmdLineOpts": 1 },function(err,result) {
console.log( JSON.stringify( result, undefined, 4 ) );
});
});
这显示了“已解析”选项,它们实际上是从命令行发送的,还是从配置文件中获取的,这并不重要,正如这里的输出所示:
{
"documents": [
{
"argv": [
"mongod",
"--config",
"mongod.conf"
],
"parsed": {
"config": "mongod.conf",
"net": {
"bindIp": "0.0.0.0",
"port": 30000
},
"security": {
"authorization": "enabled"
},
"storage": {
"dbPath": "data"
},
"systemLog": {
"destination": "file",
"logAppend": true,
"path": "log/mongod.log"
}
},
"ok": 1
}
],
"index": 338,
"messageLength": 338,
"requestId": 25,
"responseTo": 3,
"responseFlag": 8,
"cursorId": "0",
"startingFrom": 0,
"numberReturned": 1
}
因此这里出现的“security.authorization.enabled”:true
告诉您,进一步的操作将需要提供授权凭据
另请参阅和其他对您的工具有用的工具。我正在开发一个工具,帮助用户在网页中执行mongo操作。我不鼓励这样做,但我需要介绍用户在没有身份验证的环境中使用它的情况(如
localhost
)。您是否可以为该用户存储一个配置,该配置具有布尔值,表示他们是否具有凭据?比如if(user.pass)
这是一种方法,但我想让它更简单。例如,我在一个专用网络中有几个服务器。我可以通过指定服务器IP连接到它们中的任何一个。我不想逐一指定哪些需要验证,哪些不需要验证。如果有密码,您如何访问密码?你是说如果用户没有提供密码,我根本不检查吗?我考虑过,但是如果服务器需要密码,而用户没有输入密码怎么办?看起来用户通过了身份验证,但实际上没有。以后也会有例外。老实说,你已经回答了你自己的问题,就像它失败的地方一样。如果您查看周围的大多数其他“工具”(最好在您的问题中说明),它们就是这样做的,并在没有提供凭据时生成一个错误,显示缺少身份验证。简单地说,捕捉错误。对不起,我没有完全理解你。像localhost
这样的服务器通常不需要身份验证。如果我无论如何都提供用户名/密码,它无论如何都会失败。并且回调返回noerr
,只有true
/false
。因此,我无法判断这是因为用户提供了错误的用户名/密码,还是服务器根本不需要身份验证。我的意思是,看看像robomongo等工具。如果你试图做一些你没有授权的事情,那么它们会失败,或者不列出数据库、集合等。然后,可以选择提供允许访问的凭据。请不要使用MongoDB不“禁止”没有凭据的连接。它就是不允许你做事。@NeilLunn是的,他们就是这么做的。我以前试过一些工具,对我来说,这是让我困惑的部分。这感觉像是一种解决方法,而不是解决方案。我只是想知道有没有其他更好的方法。可能在执行此操作之前获取身份验证模式。试着让它更像一个普通的流程。这就是我在寻找的答案。谢谢