我正在开发一个允许用户登录 mongodb 数据库的项目。基本上我都有
db.authenticate(username, password, function(err, isAuthPass) {...}
检查用户是否通过认证。但是,有时服务器不需要身份验证。如果我提供用户名/密码,它将失败。所以我需要知道如何使用 mongo-native-client 检查身份验证模式。有什么想法吗?
我想你可以查询数据库来获取配置信息。这确实需要注意的是,您还应该使用前面讨论的“测试/失败”方法,因为您将无法从启用了身份验证且未在本地主机上运行的服务器获取此信息:
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
的存在告诉您,进一步的操作将需要提供授权凭据。
getCmdLineOpts
和其他诊断信息命令,这些命令应该对您的工具有用。
有时?始终使用密码。如果您不需要,例如您的本地环境,您应该使用该环境的配置文件,例如
./config/dev.js
,它具有该环境的凭据。
您可以在 mongosh 中使用此命令检查您是否已通过身份验证:
mongosh --port <your-mongo-port> --authenticationDatabase \ "<db-name>" -u "<db-username>" -p