【发布时间】:2015-08-29 14:28:15
【问题描述】:
我正在使用节点/快递 节点模块 = “mongodb”:“2.0.33”, “猫鼬”:“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" }
]
});
我收到了一条成功消息,我在使用mydatabase set 时调用了show users 命令确认
我在这里真的不知所措....这是我之前所做的一些尚未让我成功的研究:
这个答案表明它不会工作,因为身份验证发生在数据库级别,所以我的 mongo 实例缺少某种配置选项,但是文档现在说默认情况下禁用此类级别身份验证,并且答案链接的文档已被弃用。
MongoDB & Mongoose accessing one database while authenticating against another (NodeJS, Mongoose)
使用仍然有 addUser 的旧版 Mongo
最重要的是,我不明白为什么这样做会起作用,因为它建议我向文档中未列出的“身份验证”选项添加一个参数:
http://mongodb.github.io/node-mongodb-native/api-generated/db.html#authenticate
基本上我现在正在尝试,但不起作用。
我已经尝试了许多涉及做这种事情的答案,这给了我同样的错误。另外,我宁愿避免这些类型的解决方案,这些解决方案现在需要 +80 行代码来进行身份验证。我只想先完成基本身份验证。
【问题讨论】:
-
你看服务器上的node/mongo日志了吗?他们说什么?
-
2015-06-13T15:10:09.863-0400 我访问 [conn8] 验证 db:mydatabase { 验证:1,用户:“用户”,随机数:“xxx”,密钥:“xxx” } 2015-06-13T15:10:09.863-0400 I ACCESS [conn8] 无法使用 MONGODB-CR 机制验证 user@mydatabase:AuthenticationFailed UserNotFound 找不到用户 user@mydatabase
-
重申一下,在 shell 中键入“使用我的数据库”和“显示用户”将显示我的用户在那里......
-
所以总结一下:'user'(来自 shell)成功并且 'user@mydatabase'(来自 mongo API)失败并出现 'UserNotFound'?也许这就是问题所在?
-
我也有同样的问题,这是解释jira.mongodb.org/browse/SERVER-17459
标签: node.js mongodb authentication express