我一直在尝试为我的mongo数据库添加身份验证。
因此,遵循各种教程并解决一些问题(我的服务器是2.4并且需要升级),我终于能够添加用户
我在一个shell中运行服务器
mongod --dbpath ./
然后在另一个我跑
mongo
use admin
db.createUser({
user:"user",
pwd:"pass",
roles: [{role:"userAdminAnyDatabase", db:"admin"}]
})
我收到成功消息,然后退出服务器和shell
在另一个shell中我运行
mongod --dbpath ./ --auth
然后我跑
node server.js
在server.js文件中,有以下代码
mongodb.MongoClient.connect('mongodb://127.0.0.1:27017/db', function(err, db) {
if(err) throw err;
db.authenticate("user", "pass", function(err, res) {
if(err) throw err;
// code here
});
});
但是这会抛出一个mongo错误,认证失败
我是否尝试错误地进行身份验证,或者做错了什么?我不理解我的错误。
这是错误
C:\Users\Corey Byrne\Documents\DocuBuilder\Email Project\node_modules\mongodb\lib\mongodb\connection\base.js:245
throw message;
^
MongoError: auth failed
at Object.toError (C:\Users\Corey Byrne\Documents\DocuBuilder\Email Project\node_modules\mongodb\lib\mongodb\utils.js:110:11)
at C:\Users\Corey Byrne\Documents\DocuBuilder\Email Project\node_modules\mongodb\lib\mongodb\db.js:1128:31
at C:\Users\Corey Byrne\Documents\DocuBuilder\Email Project\node_modules\mongodb\lib\mongodb\db.js:1843:9
at Server.Base._callHandler (C:\Users\Corey Byrne\Documents\DocuBuilder\Email Project\node_modules\mongodb\lib\mongodb\connection\base.js:445:41)
at C:\Users\Corey Byrne\Documents\DocuBuilder\Email Project\node_modules\mongodb\lib\mongodb\connection\server.js:468:18
at MongoReply.parseBody (C:\Users\Corey Byrne\Documents\DocuBuilder\Email Project\node_modules\mongodb\lib\mongodb\responses\mongo_reply.js:68:5)
at null.<anonymous> (C:\Users\Corey Byrne\Documents\DocuBuilder\Email Project\node_modules\mongodb\lib\mongodb\connection\server.js:426:20)
at EventEmitter.emit (events.js:95:17)
at null.<anonymous> (C:\Users\Corey Byrne\Documents\DocuBuilder\Email Project\node_modules\mongodb\lib\mongodb\connection\connection_pool.js:201:13)
at EventEmitter.emit (events.js:98:17)
答案 0 :(得分:0)
看起来您正在名为admin
的数据库中创建用户,然后尝试登录名为db
的数据库。
答案 1 :(得分:0)
当您传递db
以连接到url时,它将失败。看起来认证是针对同一数据库完成的。相反,您应该这样做:
const client = await new Promise((res, rej) =>
MongoClient.connect(
K2_MONGODB_URL,
{
auth: {
authdb: 'admin'
},
useNewUrlParser: true
},
(err, client) => (err ? rej(err) : res(client))
)
)
其中K2_MONGODB_URL=mongodb://user:password@localhost:27017