无法使用猫鼬

时间:2019-03-21 14:19:03

标签: node.js mongodb mongoose

当我尝试用猫鼬连接到mongodb时遇到问题。我创建了一个admin / admin用户,但是当我尝试更改它时,它不起作用。 我正在使用mongoose 5.0.6和mongo 4.0.5

这是我的mongo用户:

> db.getUsers()
[
    {
        "_id" : "mydb.admin",
        "user" : "admin",
        "db" : "mydb",
        "roles" : [
            {
                "role" : "userAdminAnyDatabase",
                "db" : "admin"
            }
        ],
        "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
        ]
    }]

这就是我连接猫鼬的方式:

  let options = {    
    user: 'admin',
    pass: "admin",
    useNewUrlParser: true,

  }
  mongoose.connect(`mongodb://${dbConfig.host}:${dbConfig.port}/${dbConfig.dbConfig.database}`, options);

这有效。

现在,当我尝试更改密码时:

 db.updateUser("admin", { pwd: "admin2" }) 

我遇到以下错误:

MongoError: Authentication failed.

所以我尝试直接使用mongo命令登录(请注意身份验证数据库):

mongo --username admin --password --authenticationDatabase mydb --host XXX --port 27017

我可以正确地进行身份验证,但不能使用猫鼬进行身份验证。所以我尝试添加 authSource 参数

  let options = {    
    user: 'admin',
    pass: "admin2",
    useNewUrlParser: true,

  }
  mongoose.connect(`mongodb://${dbConfig.dbConfig.host}:${dbConfig.dbConfig.port}/${dbConfig.dbConfig.database}?authSource=${dbConfig.dbConfig.database}`, options);

我遇到验证错误。这是我的连接代码:

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));

db.on('connected', () => {
    server.listen(
      port,
      function() {
        console.log(`Listen on port ${port}`);
        console.log(`Environnement is ${process.env.NODE_ENV}`);
        console.log(`database connected ${dbConfig.dbConfig.host} ${dbConfig.dbConfig.database}`)
      });
  }
);

在以下情况下,还有一种奇怪的行为:(更改密码后)

  • 错误的凭据(admin / admin)+否authSource =>引发错误事件(身份验证失败)
  • 错误的凭据(admin / admin)+ authSource =>引发错误事件(身份验证失败)
  • 正确的凭据+ authSource =>转到“已连接事件”,但显示身份验证失败错误
  • 正确的凭据+没有authSource =>与上面相同

因此,每当我更改凭据时,它都会引发错误,但是我能够使用mongoshell对数据库进行身份验证。

最后,如果我将凭据改回为“ admin / admin”,则效果很好。

TLDR:

  • 尝试将我的mongo用户密码更改为admin2
  • 可与mongoshell一起使用,但不能与应用程序一起使用
  • 看起来它仅可使用admin作为密码,而不能使用authSource

0 个答案:

没有答案