【问题标题】:MongoError: auth failed mongoose connection stringMongoError: auth failed mongoose 连接字符串
【发布时间】:2015-07-18 07:21:45
【问题描述】:

我可以通过终端连接到数据库,但使用 mongoose 和 gulp 会出现此错误。 猫鼬/node_modules/mongodb/lib/mongodb/connection/base.js:246 MongoError:身份验证失败

我的连接字符串是:

mongodb://usr:psw@localhost:27017/dbname

知道它是什么吗?

【问题讨论】:

标签: mongodb mongoose connection-string


【解决方案1】:

我使用以下密码从MEAN packaged by Bitnami 为 Windows 7 安装 MEAN:123456

使用mongoose 模块连接到mongodb 的连接字符串语法

mongoose.connect("mongodb://[usr]:[pwd]@localhost:[port]/[db]",{auth:{authdb:"admin"}});

如果连接字符串中没有{auth:{authdb:"admin"}},则会收到以下错误:MongoError: Authentication failed.

JS 示例: mongo-test/app.js

var mongoose = require('mongoose');
mongoose.connect('mongodb://root:123456@localhost/test',{auth:{authdb:"admin"}});
mongoose.set('debug', true); // turn on debug

【讨论】:

  • 我添加了{auth:{authdb:"admin"}},但仍然收到"MongoError: auth failed"
【解决方案2】:

连接字符串会是这样的

mongodb://username:password@localhost:27017/yourdbname?authSource=admin

【讨论】:

    【解决方案3】:

    有很多方法可以让它发挥作用。这对我有用 [猫鼬 v5.9.15] :

    mongoose.connect('mongodb://localhost:27017/', {
        auth: {
            user:'root',
            password:'example'
        },
        authSource:"admin",
        useUnifiedTopology: true,
        useNewUrlParser: true
    })
    

    【讨论】:

    • 从 mongo 节点驱动程序切换到 mongoose 时出现此问题。使用相同的连接字符串,但我不断收到身份验证错误。我添加了 authSource='admin' 问题就解决了。
    • 就我而言, ("mongoose": "^6.0.2") "user" 需要更改为 "username"
    【解决方案4】:
    mongoose.connect("mongodb://[usr]:[pwd]@localhost:[port]/[db]",{ authSource: 'admin', useNewUrlParser: true, useUnifiedTopology: true });
    

    我遇到了同样的错误。通过添加authSource 选项来连接功能解决了这个问题。见上面的代码。

    【讨论】:

      【解决方案5】:
      mongo mongodb://usr:psw@localhost:27017/dbname
      
      • 密码只能是字母数字
      • 用户也应该在 db 'dbname' 中可用(注意:即使用户是超级管理员)

      通过上述更改,它已成功连接。

      【讨论】:

        【解决方案6】:

        这对我有用 mongod --version = db version v3.6.13

        mongoose.connect('mongodb://localhost/expressapi', {
            auth: {
                authdb: "admin",
                user: "root",
                password: "root",
        
            }
        });
        

        【讨论】:

          【解决方案7】:
          mongoose.connect("mongodb://[host]/[db]", { auth:{
          
              authdb: "admin",
              user: [username],
              password: [pw]
          
          }}).then(function(db){
          
              // do whatever you want
          
              mongoose.connection.close() // close db
          
          })
          

          【讨论】:

          • 这应该是文档中的默认方式。所有其他方式都会导致错误和混乱。恭喜!
          【解决方案8】:

          只需确保您的数据库已创建。 并且如果您的用户未添加到管理数据库中,请确保通过将其添加 db.createUser( ... {用户:'admin',密码:'admin',角色:['root']} ... )

          【讨论】:

            【解决方案9】:

            只需将?authSource=yourDB&w=1 添加到数据库网址的末尾

             mongoose.connect('mongodb://user:password@host/yourDB?authSource=yourDB&w=1')
            

            这对我有用。 &w=1 很重要

            【讨论】:

            • 是的,这对我有用。很奇怪,从 pymongo 开始,它不需要 authSource 参数。
            • mongoose.connect('mongodb://admin:password@localhost/some_db?authSource=admin&w=1',{})
            • w=1 的目的是什么?
            • @RyanGriggs w 选项请求确认写入操作已传播到指定数量的 mongod 实例或具有指定标签的 mongod 实例。
            【解决方案10】:

            你可能想做这样的事情......

            var opt = {
                user: config.username,
                pass: config.password,
                auth: {
                    authdb: 'admin'
                }
            };
            var connection = mongoose.createConnection(config.database.host, 'mydatabase', config.database.port, opt);
            

            'authdb' 选项是您在其下创建用户的数据库。

            【讨论】:

            • Error [MongooseError]: Mongoose 5.x no longer supports ``mongoose.connect(host, dbname, port)`` or ``mongoose.createConnection(host, dbname, port)``. See http://mongoosejs.com/docs/connections.html for supported connection syntax (是的,我意识到 5 年过去了……访客信息)
            【解决方案11】:

            我找到了更高级的解决方案,看起来当您从 mongo shell 创建用户时,它会生成 SCRAM-SHA-1 而不是 MongoDB-CR。因此,使用 MongoDB-CR 身份验证创建新用户的解决方案。

            MongoDB-CR Authentication failed

            【讨论】:

            • 嘿,谢谢你的回答。我会试试看。但是我们已经切换到 sqlite。
            【解决方案12】:

            您是否为 dbname 设置了用户?默认情况下,除非您明确设置用户,否则不需要用户连接到数据库。如果你还没有,你应该尝试连接到mongodb://localhost:27017/dbname,看看你是否仍然收到错误。

            【讨论】:

            • 我有用户名和密码,否则数据将提供给所有人。我也尝试使用root用户,但问题存在。我正在使用猫鼬,如果其他人发出类似的问题......并解决)感兴趣)
            • 这里有同样的问题。我注意到它只有在我创建第二个或更高编号的数据库链接时才有问题,而不是我创建的第一个..
            猜你喜欢
            • 2015-09-04
            • 2019-09-05
            • 2020-05-05
            • 2016-08-19
            • 1970-01-01
            • 1970-01-01
            • 2020-07-23
            • 2016-10-01
            相关资源
            最近更新 更多