当我尝试用猫鼬连接到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}`)
});
}
);
在以下情况下,还有一种奇怪的行为:(更改密码后)
因此,每当我更改凭据时,它都会引发错误,但是我能够使用mongoshell对数据库进行身份验证。
最后,如果我将凭据改回为“ admin / admin”,则效果很好。
TLDR: