You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);
  }));
});    

额外注意点

  1. 你原代码中MongoClient.connect的回调参数命名为db不准确,驱动返回的是MongoClient实例,需要调用client.db()来获取具体的数据库对象。
  2. 原代码中cb(err, db.db("ourNewDb"))会把之前捕获的err传入回调,即使认证成功也会传递错误,这会导致后续逻辑异常,应改为cb(null, targetDb)。

内容的提问来源于stack exchange,提问作者JohannC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 10:05:55