【问题标题】:Unable to connect to mongolab, Getting MongoError: auth failed无法连接到 mongolab,出现 MongoError: auth failed
【发布时间】:2015-09-04 15:39:49
【问题描述】:

我最近在 mongoLab 中创建了一个帐户。当我尝试使用以下语句连接到数据库时。

var mongoose = require('mongoose');
mongoose.connect('mongodb://mk:12345@ds047742.mongolab.com:47742/mkdb');

我总是收到以下错误

MongoError: auth failed
at Function.MongoError.create (/Users/a042292/Desktop/start/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:31:11)
at /Users/a042292/Desktop/start/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:793:66
at Callbacks.emit (/Users/a042292/Desktop/start/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:94:3)
at null.messageHandler (/Users/a042292/Desktop/start/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:235:23)
at Socket.<anonymous> (/Users/a042292/Desktop/start/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/connection/connection.js:259:22)
at Socket.emit (events.js:107:17)
at readableAddChunk (_stream_readable.js:163:16)
at Socket.Readable.push (_stream_readable.js:126:10)
at TCP.onread (net.js:538:20)

【问题讨论】:

  • db 用户名和密码只有正确
  • 似乎 mongolab 没有提供连接。我尝试 ping ds047742.mongolab.com,但显示无法连接到远程主机
  • 嗨,您可以在此处查看我们的故障排除文档:docs.mongolab.com/connecting/#help。如果您有任何问题或无法开始,请随时给我们发送电子邮件。
  • 感谢@Chris Chang,这真的很有帮助

标签: node.js mongodb mlab


【解决方案1】:

确保您使用的是数据库 usernamepassword 而不是来自 Mlab 的帐户 usernamepassword

在 MLab(以前的 MongoLab)中,执行以下操作

  1. 导航到Users
  2. Add Database User
  3. 选择您的用户名和密码

现在您可以在 shell 上使用 mongo ds061374.mlab.com:61374/yourdb -u &lt;dbuser&gt; -p &lt;dbpassword&gt;

【讨论】:

  • “确保您使用的是数据库用户名和密码,而不是来自 Mlab 的帐户用户名和密码”这救了我的命
  • 令人沮丧的是,他们并没有真正说明这一点。谢谢,节省了我更多浪费时间摆弄这个。我确信这与我从 .env 文件中加载 url 有关 >.
  • “确保您使用的是数据库用户名”啊!谢谢人:)
  • 另外,如果您的用户名和密码包含special characters,则必须进行URL编码
  • 添加数据库用户是我错过的。你统治
【解决方案2】:

Mongolab 将他们的 2.6.x 数据库升级到 3.0.x。不幸的是,mongo3 有不同的身份验证机制,所以旧客户端不兼容。

Mongoose 正在使用本机 mongo 驱动程序,因此您必须对其进行升级。这通常通过升级本地 mongo 安装来完成。

对于使用 mongojs 的用户,升级到最新版本并在连接时在 options 对象中添加authMechanism:'ScramSHA1' 参数:

db = mongojs('mongodb://username:password@ds31341.mongolab.com:32132/mydb', ["mycollection"], {authMechanism: 'ScramSHA1'});

【讨论】:

  • mongoose.connect的参数是否不同?
  • @thetallweeks 不,如果您更新本地 mongo 安装,应用程序将以相同的参数连接。
  • 也可能是你的node版本太旧了。我通过 heroku 节点教程启动了我的应用程序,所以我在服务器上使用的节点版本是 0 点。直到 mongolab 更新它才产生问题。我的应用程序现在运行良好,因为我已经通过 package.json 在本地和服务器上更新了节点。
【解决方案3】:

对我来说,解决方案是:

$ npm install --save --save-exact mongoose@4.1.9

根据:Heroku app crashes after MongoDB updated to 3.0

【讨论】:

    【解决方案4】:

    这里我们要知道mLab用户名和密码也不是我们数据库的用户名和密码...因为我们必须检查我们是否使用了正确的用户名和密码来连接字符串

    我们可以在这里创建数据库用户帐户---->>

    我的连接常量如下

    const db ="mongodb://<My database username>:<my database password>.mlab.com:39648/videoplayer"
    

    【讨论】:

      【解决方案5】:

      只需将 ?authSource=yourDB&w=1 添加到 db url 的末尾

      mongoose.connect('mongodb://user:password@host/yourDB?authSource=yourDB&w=1') 这对我有用。 &w=1 很重要

      例如

      MONGO_URI='mongodb://kahn:kahney@ds747384.mlab.com:13402/ecommerce?authSource=ecommerce&w=1';

      https://github.com/Automattic/mongoose/issues/4587

      这救了我的命

      【讨论】:

        【解决方案6】:

        1- 确保数据库已启动并正在运行。 2- 不要忘记创建 db 用户以获得访问凭据。

        希望对您有所帮助!

        【讨论】:

          【解决方案7】:

          我在使用旧版本的 mongoose(版本 3.8.10)时遇到此错误。升级到最新版本(版本 5.0.10)后,错误消失并建立了连接。

          只需运行 npm install mongoose@5.0.10 --save ....但将版本替换为最新版本,

          【讨论】:

            【解决方案8】:

            确保您使用正确的数据库用户名和密码。

            如果您尝试通过代码连接到 db,并且您的用户名和密码包含任何特殊字符,例如 '@'、'$' 等,请确保使用 encodeURIComponent() 对 URI 进行编码功能

            示例:"localhost://pooja:"+encodeURIComponent('pooja@123')+"/trymynewdb" , 然后使用编码后的 uri 连接到 db。

            【讨论】:

              【解决方案9】:

              如果您的密码包含特殊字符,最好检查此处出现的特殊字符的 url 编码值:url encoding list

              但我强烈建议您在尝试连接之前先验证您的数据是否正在发送。 验证它的一种方法是 console.log 正在发送的数据。 示例:

              console.log(process.env.MONGO_ATLAS_PW);
              

              【讨论】:

                【解决方案10】:

                您可以尝试通过 mshell 连接,我在使用 mongoose 连接时遇到了类似的问题,即使我已经给它提供了数据库用户名和正确的密码。

                只需在终端输入以下命令

                mongo ds239412.mlab.com:39412/videoplayer11 -u dbuser -p dbpassword (command will be different for you, see here)。

                并删除您通过猫鼬连接的模型文件中的代码。

                为我工作。 快乐的面孔。

                【讨论】:

                  猜你喜欢
                  • 2015-07-18
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-01-25
                  • 2020-02-10
                  • 1970-01-01
                  • 2017-11-10
                  • 1970-01-01
                  相关资源
                  最近更新 更多