gpt4 book ai didi

node.js - 连接到 MongoDB 时身份验证总是失败

转载 作者:可可西里 更新时间:2023-11-01 09:13:35 27 4
gpt4 key购买 nike

我正在使用 Node/ express Node 模块= “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" }
]
});

我收到一条成功消息,我在使用 mydatabase 集时通过调用 show users 命令进行了确认

我在这里真的很茫然....这是我之前所做的一些尚未使我成功的研究:

Cannot authenticate into mongo, "auth fails"

这个答案表明它不会工作,因为身份验证发生在数据库级别,所以我缺少我的 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

http://mongoosejs.com/docs/connections.html

基本上是我现在正在尝试但没有用的东西。

authenticate user with mongoose + express.js

我已经尝试了很多涉及做这类事情的答案,这给了我同样的错误。另外,我宁愿暂时避免使用需要 +80 行代码进行身份验证的此类解决方案。我只想先进行基本身份验证。

最佳答案

您提到您正在使用 MongoDB 3.0。在 MongoDB 3.0 中,它现在支持多种身份验证机制。

  1. MongoDB 质询和响应 (SCRAM-SHA-1) - 3.0 中的默认值
  2. MongoDB 质询和响应 (MONGODB-CR) - 以前的默认值 (< 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 站点上的兼容性页面——抱歉,无法发布更多信息目前超过 2 个链接)。

我建议您更新 Mongoose。

关于node.js - 连接到 MongoDB 时身份验证总是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30822370/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com