无法连接到MongoLab,出现MongoError:认证失败

31

我最近在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)

数据库用户名和密码正确。 - mkuniyil
看起来 Mongolab 没有提供连接。我尝试 Ping ds047742.mongolab.com,但它显示无法连接到远程主机。 - mkuniyil
嗨,您可以在此处查看我们的故障排除文档:http://docs.mongolab.com/connecting/#help。如果您有任何问题或无法开始,请随时发送电子邮件给我们。 - Chris Chang
谢谢@Chris Chang,那真的很有帮助。 - mkuniyil
可能与此相关:https://dev59.com/B4vda4cB1Zd3GeqPcKUY#31079325 - dug
10个回答

42

确保您正在使用来自数据库usernamepassword,而非Mlab帐户usernamepassword的凭据。

在MLab(前身为MongoLab)中,请执行以下操作:

  1. 导航到Users
  2. 添加数据库用户
  3. 选择您的用户名和密码

现在可以使用以下命令在shell上进行测试:mongo ds061374.mlab.com:61374/yourdb -u <dbuser> -p <dbpassword>


4
请确保您正在使用数据库的用户名和密码,而不是来自Mlab的账户用户名和密码。这个提示拯救了我的生命。 - Doruk Karınca
令人沮丧的是,他们没有真正澄清这一点。谢谢,节省了我更多浪费时间来摆弄这个问题。我曾经相信它与我从.env文件加载URL有关>。< - Rick Calder
请确保您正在使用数据库用户名。啊!谢谢你! - A.R. Nirjhor
此外,如果您的用户名和密码包含特殊字符,则必须进行URL编码。 - kevin.groat
添加数据库用户是我遗漏的。你很棒! - Jony-Y

25

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

Mongoose正在使用原生的mongo驱动程序,因此您必须升级它。通常通过升级本地mongo安装来完成此操作。

对于那些使用mongojs的人,请升级到最新版本,并在连接时选项对象中添加authMechanism:'ScramSHA1'参数:

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

2
mongoose.connect 的参数是否不同? - thetallweeks
@thetallweeks 不会,如果你更新了本地的Mongo安装,应用程序将使用相同的参数连接。 - gtsouk
1
可能是您的节点版本太旧了。我是通过Heroku节点教程启动我的应用程序的,因此我在服务器上使用的节点版本为0点几。直到Mongolab更新之前,它并没有出现问题。自从我通过package.json在本地和服务器上更新了节点后,我的应用程序现在运行良好。 - MyrionSC2

9

6

数据库用户创建在这里,我们必须知道mLab的用户名和密码不是我们数据库的用户名和密码...因此,我们必须检查我们是否使用了正确的用户名和密码进行连接字符串

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

我的连接常量如下

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

3

只需要在数据库的url末尾添加?authSource=yourDB&w=1

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

这拯救了我的生命。


1

1- 确保数据库正在运行。 2- 不要忘记创建数据库用户以获取访问凭据。

希望这能帮到您!


0

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

只需在终端中键入以下命令:

mongo ds239412.mlab.com:39412/videoplayer11 -u dbuser -p dbpassword (对于你来说,命令将不同,请参见此处)。

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

对我有用。 愉快的面孔。


0

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

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

例如:"localhost://pooja:"+encodeURIComponent('pooja@123')+"/trymynewdb",然后使用编码后的URI连接到数据库。


0

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

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


0

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

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

console.log(process.env.MONGO_ATLAS_PW);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接