#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