Не удается подключиться к базе данных с помощью mongoose

#node.js #mongodb #mongoose

#node.js #mongodb #mongoose

Вопрос:

У меня возникают проблемы при попытке подключиться к mongodb с помощью mongoose. Я создал администратора / admin user, но когда я пытаюсь его изменить, это не работает. Я использую 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"
        ]
    }]
  

И вот как я подключаюсь к mongoose :

   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
  

Я могу аутентифицироваться должным образом, но не с помощью mongoose. Поэтому я пытаюсь добавить параметр 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 => выдают событие ошибки (сбой аутентификации)
  • Правильные учетные данные authSource => переходит к «подключенному событию», но отображает ошибку сбоя аутентификации
  • Правильные учетные данные нет authSource => такие же, как указано выше

Поэтому всякий раз, когда я меняю учетные данные, это выдает ошибку, но я могу аутентифицироваться в базе данных с помощью mongoshell.

Наконец, если я снова изменю учетные данные на «admin / администратор», это будет работать отлично.

TLDR :

  • Попробуйте изменить пароль пользователя моего mongo на admin2
  • Работает с mongoshell, но не с приложением
  • Похоже, что это работает только с admin в качестве пароля и без authSource