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
相关产品推荐
相关产品推荐

