【问题标题】:Mongodb + Atlas: 'bad auth Authentication failed.', code: 8000,Mongodb + Atlas:'bad auth Authentication failed.',代码:8000,
【发布时间】:2020-05-18 02:19:11
【问题描述】:

我试过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

感谢您帮助我。我不知道发生了什么。

【问题讨论】:

  • 我要尝试的第一件事是从终端运行mongo yourfullconnectionstring。这将告诉您问题是否出在代码或设置上
  • 我希望你看到了这个注释? If the username or password includes the at sign @, colon :, slash /, or the percent sign % character, use percent encoding.
  • @MattClark 我看到了 - 但我的密码不包括任何这些
  • @Valijon 不,我确定这是正确的密码,这个密码是我用于帐户的密码

标签: node.js mongodb mongodb-atlas


【解决方案1】:

我只是知道我使用了正确的用户名、密码和 DBname 时遇到了这个问题。

我尝试更改db用户的密码以仔细检查,但仍然无效。

然后我创建了一个新用户,赋予用户管理员角色,设置密码等,然后使用该新用户和密码(相同的 dbname)进行连接,并且成功了。

我不知道到底是什么问题,但希望它可以帮助你们中的一些人节省一些时间:)

祝你好运!

【讨论】:

  • 不确定默认用户的问题,但创建新用户也对我有用。
  • 完全不明白为什么,但这解决了它。
  • 在这里打桩,这解决了我的这个问题的实例。唉,这令人不满意,因为我想了解为什么。如果有人有见识,请分享。 ?
【解决方案2】:

我有同样的问题,在那个连接字符串中它被写成"mongodb+srv://&lt;username&gt;:&lt;password&gt;@cluster0.4h226.mongodb.n...",你应该在那个字符串中输入用户名和密码。

  1. 假设我的用户名是“用户”,密码是密码,我们应该写"mongodb+srv://user:password@cluster0.4h226.mongodb.n...",没有“”;

  2. 如果您的密码中有任何特殊字符,请将其替换为带有 % 符号的 ascii 代码。例如,# 将是 %35

【讨论】:

  • 谢谢,在此期间修复了它,但我花了一段时间才明白。
  • 您需要使用urllib.parse.quote("username@gmail.com")urllib.parse.quote("p@ssword") 对其进行url 编码。在此处查看此答案stackoverflow.com/a/39283299/337666
【解决方案3】:

我遇到了同样的问题,我更改了密码,但没有用。我的密码包括我删除它们的号码,它有效

【讨论】:

    【解决方案4】:

    也可以试试,

    'CLIENT' : { 'host' : 'connection_string_to_mongodb' }

    既然connection_string有用户名、密码、数据库名、集群名等等,客户端就只有这一个键值对。它对我有用。

    【讨论】:

      【解决方案5】:

      还要确保您的密码不包含任何数字或特殊字符

      【讨论】:

        【解决方案6】:

        不妨尝试将您的 IP 添加到白名单。 转到网络访问 -> 添加 IP 地址 -> 当前 IP,然后保存更改并重试,希望对您有所帮助。

        【讨论】:

          【解决方案7】:

          创建一个新的管理员用户帐户对我有用。我发现这不仅适用于 pymongo,而且在我使用 mongo shell 时也是如此。

          【讨论】:

            【解决方案8】:

            由于某种原因,当我避免复制/粘贴并键入用户名和密码时,它可以工作。

            【讨论】:

              【解决方案9】:

              解决方案是从用户名和密码中删除括号。输入正确的数据库名称。授予对您的数据库的访问权限,以便将数据发布到您的数据库中。

              【讨论】:

                【解决方案10】:

                如果您的姓名或密码包含数字,请确保您的用户名和密码在名称和数字之间包含“_”

                【讨论】:

                  【解决方案11】:

                  使用这个

                  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",
                    }
                  

                  注意:

                  从用户名和密码中删除 '' 并确保用户名和密码位于冒号前后 (symbol = ":" ) 冒号前后不应有空格

                  【讨论】:

                    【解决方案12】:

                    这不仅仅与密码有关

                    尽管某些人已经回答了您的错误,但这是密码问题。但是,查看 cmets and answer here,我看到很多人有类似的错误,但无法用提供的答案解决。但为什么 ?

                    此错误不仅与密码有关。这里数据库名称、密码和用户名很重要。
                    由于数据库名称、密码和用户名是 url 的一部分,因此如果您在 url 的这三个部分中的任何一个中使用任何 特殊字符,那么您需要将它们替换为 % 然后 @ 987654324@的那些特殊标志。例如:对于$- 符号,您需要将其替换为%36%45
                    并且显然也从您复制的初始链接中删除&lt;&gt; 符号,例如&lt;password&gt;
                    ASCII Code Here
                    See the image to understand more

                    【讨论】:

                      【解决方案13】:

                      我遇到了同样的问题并找到了解决方案。 但是更改了数据库密码并且可以正常工作。 [尽量保留自动生成的密码]

                      【讨论】:

                      • 您可以从 MongoDB 的数据库访问部分更改密码。并尽量保留自动生成的密码。
                      【解决方案14】:
                      pip install djongo
                      pip install dnspython
                      DATABASES = {
                          'default': {
                              'ENGINE': 'djongo',
                               "NAME": "database name",
                              "CLIENT": {
                              "host": "connection_string_to_mongodb",
                              
                          },
                              
                          }
                      }
                      

                      上面的代码对我有用。 单独提供用户名和密码不起作用

                      【讨论】:

                        猜你喜欢
                        • 2019-09-05
                        • 2019-04-14
                        • 1970-01-01
                        • 2020-06-07
                        • 2014-03-15
                        • 2019-11-07
                        • 2019-05-11
                        • 1970-01-01
                        相关资源
                        最近更新 更多