MongoClient.Connect连接MongoDB认证失败问题求助
MongoDB 7.0.4 认证失败:指定authSource后仍在目标库查找用户
从你的mongod日志可以明确看到,认证请求是针对ourNewDb(日志中显示为Collaborit_MWM_Server)发起的,而非你指定的admin库,说明authSource的配置没有被驱动正确识别。问题核心是配置参数的层级错误以及参数名使用不当。
解决方案:修正配置结构与参数名
MongoDB Node驱动6.x版本中,authSource是顶层配置项,不属于auth对象的属性;同时auth对象内的用户名参数是user,而非username。你之前的写法把authSource放在auth对象里,导致驱动忽略了这个配置,默认使用连接字符串中的目标库作为认证源。
修正后的代码示例
var { MongoClient } = require('mongodb'); var ODataServer = require("simple-odata-server"); var Adapter = require('simple-odata-server-mongodb'); MongoClient.connect("mongodb://localhost:27017/ourNewDb", { authSource: "admin", // 移至顶层配置 auth: { user: "admin", // 使用正确参数名user password: "ourPassword" }, }, function(err, client) { if (err) { return console.error(err); } // 从client实例获取目标数据库对象 const targetDb = client.db("ourNewDb"); odataServer.adapter(Adapter(function(cb) { console.log("success"); cb(null, targetDb); // 此处应传入null而非err,避免误传错误 })); });
更简洁的连接字符串写法
也可以将所有认证信息直接嵌入连接字符串,彻底避免配置层级错误:
var { MongoClient } = require('mongodb'); var ODataServer = require("simple-odata-server"); var Adapter = require('simple-odata-server-mongodb'); const connectionUri = "mongodb://admin:ourPassword@localhost:27017/ourNewDb?authSource=admin"; MongoClient.connect(connectionUri, function(err, client) { if (err) { return console.error(err); } const targetDb = client.db("ourNewDb"); odataServer.adapter(Adapter(function(cb) { console.log("success"); cb(null, targetDb); })); });
额外注意点
- 你原代码中
MongoClient.connect的回调参数命名为db不准确,驱动返回的是MongoClient实例,需要调用client.db()来获取具体的数据库对象。 - 原代码中
cb(err, db.db("ourNewDb"))会把之前捕获的err传入回调,即使认证成功也会传递错误,这会导致后续逻辑异常,应改为cb(null, targetDb)。
内容的提问来源于stack exchange,提问作者JohannC
相关产品推荐
相关产品推荐

