我尝试过this and it's not working。
Mongodb + Atlas出现以下错误:
MongoError: bad auth Authentication failed.
at /Users/cyrus/Documents/Code/01. Code/Franklin-ford/franklin-ford-server/node_modules/mongodb-core/lib/auth/auth_provider.js:46:25
at /Users/cyrus/Documents/Code/01. Code/Franklin-ford/franklin-ford-server/node_modules/mongodb-core/lib/auth/scram.js:215:18
at Connection.messageHandler (/Users/cyrus/Documents/Code/01. Code/Franklin-ford/franklin-ford-server/node_modules/mongodb-core/lib/connection/connect.js:334:5)
at Connection.emit (events.js:203:13)
at processMessage (/Users/cyrus/Documents/Code/01. Code/Franklin-ford/franklin-ford-server/node_modules/mongodb-core/lib/connection/connection.js:364:10)
at TLSSocket.<anonymous> (/Users/cyrus/Documents/Code/01. Code/Franklin-ford/franklin-ford-server/node_modules/mongodb-core/lib/connection/connection.js:533:15)
at TLSSocket.emit (events.js:203:13)
at addChunk (_stream_readable.js:295:12)
at readableAddChunk (_stream_readable.js:276:11)
at TLSSocket.Readable.push (_stream_readable.js:210:10)
at TLSWrap.onStreamRead (internal/stream_base_commons.js:166:17) {
ok: 0,
errmsg: 'bad auth Authentication failed.',
code: 8000,
codeName: 'AtlasError',
name: 'MongoError',
[Symbol(mongoErrorContextSymbol)]: {}
这是我实例化数据库的方法:
从credentials.js
:
const config = {
mongoConnectionURL: "mongodb://cyruslk:<MY_PASS_HERE>@franklinford-shard-00-00-3dveb.mongodb.net:27017,franklinford-shard-00-01-3dveb.mongodb.net:27017,franklinford-shard-00-02-3dveb.mongodb.net:27017/test?ssl=true&replicaSet=FranklinFord-shard-0&authSource=admin&retryWrites=true&w=majority",
mongoDatabaseName: "FranklinFord",
}
在我的主要server.js
应用中:
const {MongoClient} = require("mongodb");
const connectionURL = config.mongoConnectionURL;
const databaseName = config.mongoDatabaseName;
let sendToDb = (dataToInsert) => {
MongoClient.connect(connectionURL, {
useNewUrlParser: true,
}, (error, client) => {
if(error){
console.log(error);
return console.log("Unable to connect to the db.");
}
const db = client.db(databaseName);
console.log(db);
db.collection("ford_twitter").insertOne({
masterData: dataToInsert
}, (error, result) => {
if(error){
return console.log("unable to insert users");
}
console.log("Data successfully inserted");
})
})
}
您可以找到代码here
感谢您的帮助。我不知道发生了什么。
答案 0 :(得分:9)
我刚刚知道我使用了正确的用户名、密码和 DBname 时遇到了这个问题。
我尝试更改 db 用户的密码以进行仔细检查,但仍然无效。
然后我创建了一个新用户,赋予用户管理员角色,设置密码等,然后使用该新用户和密码(相同的 dbname)进行连接并且它工作正常。
我不知道到底是什么问题,但希望它可以帮助你们中的一些人节省一些时间:)
祝你好运!
答案 1 :(得分:3)
我遇到了同样的问题,我更改了密码,但没有用。我的密码包括我删除它们的数字并且它有效
答案 2 :(得分:1)
我遇到了同样的问题,在该连接字符串中,它写为"mongodb+srv://<username>:<password>@cluster0.4h226.mongodb.n..."
,您应该在该字符串中输入用户名和密码。
假设我的用户名是“ user”,密码是password,我们应该写"mongodb+srv://user:password@cluster0.4h226.mongodb.n..."
,不带“ <”和“>“;”
如果您的密码中包含任何特殊字符,请使用带有%
符号的ascii代码替换它们。例如,#
将是%35
。
答案 3 :(得分:0)
也试一下,
'CLIENT' : { 'host' : 'connection_string_to_mongodb' }
因为connection_string有用户名、密码、数据库名、集群名等等,所以在客户端就只有这一个键值对。它对我有用。
答案 4 :(得分:0)
还要确保您的密码没有任何数字或特殊字符
答案 5 :(得分:0)
不妨尝试将您的 IP 添加到白名单。 转到网络访问 -> 添加 IP 地址 -> 当前 IP,然后保存更改并重试,希望对您有所帮助。
答案 6 :(得分:0)
创建一个新的管理员用户帐户对我有用。我发现这不仅适用于 pymongo,而且适用于我使用 mongo shell 的情况。
答案 7 :(得分:-1)
pip install djongo
pip install dnspython
DATABASES = {
'default': {
'ENGINE': 'djongo',
"NAME": "database name",
"CLIENT": {
"host": "connection_string_to_mongodb",
},
}
}
上面的代码对我有用。 单独提供用户名和密码不起作用
答案 8 :(得分:-1)
我遇到了同样的问题并找到了解决方案。 但更改了数据库密码,它可以工作。 [尽量保留自动生成的密码]