无法使用node.js对MongoDB进行身份验证

时间:2015-04-30 21:36:03

标签: javascript node.js mongodb

我一直在尝试为我的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)

2 个答案:

答案 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