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

MongoDB 6.0与Mongoose连接时认证失败问题求助

MongoDB 6.0 + Mongoose 认证失败(AuthenticationFailed)问题解决

问题描述

升级到MongoDB 6.0后,使用Mongoose连接数据库时持续抛出MongoServerError: Authentication failed错误,配置与MongoDB 5.x完全一致,但无法正常工作。已确认用户名密码正确,且能通过mongosh正常登录,甚至禁用认证后问题仍存在。

错误信息

MongoServerError: Authentication failed.
    at Connection.onMessage (/home/leemorgan/market/market-api/node_modules/mongodb/lib/cmap/connection.js:207:30)
    at MessageStream.<anonymous> (/home/leemorgan/market/market-api/node_modules/mongodb/lib/cmap/connection.js:60:60)
    at MessageStream.emit (node:events:513:28)
    at processIncomingData (/home/leemorgan/market/market-api/node_modules/mongodb/lib/cmap/message_stream.js:132:20)
    at MessageStream._write (/home/leemorgan/market/market-api/node_modules/mongodb/lib/cmap/message_stream.js:33:9)
    at writeOrBuffer (node:internal/streams/writable:392:12)
    at _write (node:internal/streams/writable:333:10)
    at Writable.write (node:internal/streams/writable:337:10)
    at Socket.ondata (node:internal/streams/readable:766:22)
    at Socket.emit (node:events:513:28) {
  ok: 0,
  code: 18,
  codeName: 'AuthenticationFailed',
  [Symbol(errorLabels)]: Set(1) { 'HandshakeError' }
}

当前Mongoose连接代码

mongoose.connect("mongodb://127.0.0.1:27017/myDB", {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    auth: {authSource: "admin"},
    user: "user",
    pass: process.env.MONGODB_PASS,
    family: 4
});

解决方案

  • 升级Mongoose与MongoDB驱动版本
    MongoDB 6.0对驱动版本有严格要求,旧版依赖的驱动可能不兼容。确保:

    • Mongoose版本 ≥ 6.6.0
    • mongodb包版本 ≥ 4.6.0
      执行命令更新:
    npm install mongoose@latest mongodb@latest
    
  • 调整连接配置写法
    MongoDB 6.0推荐通过URI参数传递认证信息,原配置中auth对象的写法可能被新版本驱动忽略。修改连接字符串:

    const uri = `mongodb://user:${process.env.MONGODB_PASS}@127.0.0.1:27017/myDB?authSource=admin&family=4`;
    mongoose.connect(uri, {
        useNewUrlParser: true,
        useUnifiedTopology: true
    });
    
  • 指定认证机制
    MongoDB 6.0默认使用SCRAM-SHA-256认证,若用户是在MongoDB 5.x中创建的,可能使用旧的SCRAM-SHA-1。可在连接时指定机制:

    mongoose.connect(uri, {
        useNewUrlParser: true,
        useUnifiedTopology: true,
        authMechanism: 'SCRAM-SHA-1'
    });
    

    或重新创建用户并指定SCRAM-SHA-256:

    use admin
    db.createUser({
      user: "user",
      pwd: "your-password",
      roles: [{ role: "readWrite", db: "myDB" }],
      mechanisms: ["SCRAM-SHA-256"]
    });
    
  • 检查MongoDB绑定IP配置
    若禁用认证后仍无法连接,检查mongod.conf中的net.bindIp配置,确保允许本地IP(如127.0.0.1)连接,临时设置为0.0.0.0可测试是否为IP限制问题。

  • 清除缓存并重启服务
    删除node_modules和package-lock.json,重新执行npm install,然后重启MongoDB服务与Node.js应用,清除旧驱动缓存可能导致的异常。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:35:23