我正在使用node / express node_modules = “mongodb”:“2.0.33”, “mongoose”:“3.8.15”,
mongo shell版本:3.0和mongo 3.0
我能够很好地连接到我的mongoDB,但如果我传入任何身份验证参数,它将会失败:
connection error: { [MongoError: auth failed] name: 'MongoError', ok: 0, errmsg: 'auth failed', code: 18 }
发生这种情况时,以下内容会显示在日志中:
2015-06-13T15:10:09.863-0400 I ACCESS [conn8] authenticate db: mydatabase { authenticate: 1, user: "user", nonce: "xxx", key: "xxx" } 2015-06-13T15:10:09.863-0400 I ACCESS [conn8] Failed to authenticate user@mydatabase with mechanism MONGODB-CR: AuthenticationFailed UserNotFound Could not find user user@mydatabase
我已经做了很多模式试图让它发挥作用。
当我在适当的数据库上执行mongo shell中的show users命令时会发生什么:
{
"_id" : "mydatabase.user",
"user" : "user",
"db" : "mydatabase",
"roles" : [
{
"role" : "readWrite",
"db" : "mydatabase"
}
]
}
这是我尝试在传递正确的参数时连接到这个特定的数据库:
mongoose.connect('mongodb://user:password@host:port/mydatabase');
为了更好的衡量,我还尝试传递一个选项哈希,而不是通过uri传递参数:
mongoose.connect('mongodb://host:port/mydatabase',{user: 'user',pass: 'password'});
奇怪的是,这可以从shell完成:
mongo mydatabase -u user -p password
如此清楚,凭据是正确的,它正在将它们排列到正确的数据库,但是与Mongoose的连接有些不起作用......
这是我在创建该用户时传入的shell命令:
db.createUser({
user: "user",
pwd: "password",
roles: [
{ role: "readWrite", db: "mydatabase" }
]
});
我收到了一条成功消息,我在使用show users
集
mydatabase
命令确认了
我真的在这里失去了......这是我以前做过的一些尚未给我成功的研究:
这个答案表明它不会起作用,因为身份验证发生在数据库级别,所以我缺少某种配置选项供我的mongo实例使用,但是文档现在说这样的级别身份验证默认是禁用的,以及答案链接到的文档已被弃用。
MongoDB & Mongoose accessing one database while authenticating against another (NodeJS, Mongoose)
使用仍然有addUser
的旧版Mongo
最重要的是,我不明白为什么它会起作用,因为它建议我在'auth'选项中添加一个参数,该参数未在文档中列出:
http://mongodb.github.io/node-mongodb-native/api-generated/db.html#authenticate
基本上我现在正在尝试,但没有工作。
我尝试过一些涉及做这类事情的答案,这给了我同样的错误。此外,我宁愿避免使用这类需要+80行代码进行身份验证的解决方案。我只是想首先获得基本身份验证。
答案 0 :(得分:3)
您提到您使用的是MongoDB 3.0。在MongoDB 3.0中,它现在支持多种身份验证机制。
如果您使用新用户创建了新的3.0数据库,则可以使用SCRAM-SHA-1创建它们。
所以你需要一个能够进行身份验证的驱动程序:
http://docs.mongodb.org/manual/release-notes/3.0-scram/#considerations-scram-sha-1-drivers
如果您使用现有用户数据从2.x升级数据库,他们仍将使用MONGODB-CR,并且必须升级用户身份验证数据库:
http://docs.mongodb.org/manual/release-notes/3.0-scram/#upgrade-mongodb-cr-to-scram
特定于您的特定环境由于正在使用的MongoDB Node.js驱动程序,该版本的Mongoose兼容性似乎不支持3.0(请参阅Mongoose网站上的兼容性页面 - 抱歉,可以&#39 ; t目前发布超过2个链接。
我建议你更新Mongoose。
答案 1 :(得分:0)
Mongo v3.0 +:
db字段(角色对象之外)在这里很重要。这是不可设置的bby传递给createUser命令afaict。
设置它的方法是键入'使用'在发出creatUser命令之前。
除非你这样做,否则db对象里面的角色可能有正确的和预期的值,但是auth仍然无效。