Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor和MongoDB:身份验证失败_Mongodb_Meteor - Fatal编程技术网

Meteor和MongoDB:身份验证失败

Meteor和MongoDB:身份验证失败,mongodb,meteor,Mongodb,Meteor,如果我在本地运行Meteor,它会工作得很好。如果我用一个MONGO_URL调用Meteor,而这个URL没有用户名:密码,那么它也能正常工作。但是,如果我打开MongoDB身份验证并重新启动,然后使用username:password设置运行Meteor,如MONGO_URL=”mongodb://username:password@127.0.0.1:27017/meteor“,然后在meteor加载时,我得到一个身份验证失败。我已检查用户名和密码是否正确。我读到Meteor和MongoDB

如果我在本地运行Meteor,它会工作得很好。如果我用一个
MONGO_URL
调用Meteor,而这个URL没有
用户名:密码
,那么它也能正常工作。但是,如果我打开MongoDB身份验证并重新启动,然后使用
username:password
设置运行Meteor,如
MONGO_URL=”mongodb://username:password@127.0.0.1:27017/meteor“
,然后在meteor加载时,我得到一个身份验证失败。我已检查用户名和密码是否正确。我读到Meteor和MongoDB认证可能存在问题,所以有人知道这方面的信息吗?我正在使用以下版本:

流星-1.0.3.2 MongoDB-2.6.7(通过brew安装)

  • 在“管理员”数据库上,创建了一个“超级用户”,如下所示:

     systemLog:
     destination: file
     path: /usr/local/var/log/mongodb/mongo.log
     logAppend: true
     storage:
     dbPath: /usr/local/var/mongodb
     net:
     bindIp: 127.0.0.1
     security:
     authorization: enabled
    
       use admin
       db.createUser({user: "superuser", pwd: "password", roles:["root"]})use admin
    
  • 然后我在“meteor”数据库上创建了一个用户

  • 上述步骤生成:

    Successfully added user: {
        "user" : "meteor",
        "roles" : [
            {
                "role" : "readWrite",
                "db" : "meteor"
            }
        ]
    }
    
  • 如果我执行一个
    db.getUsers()
    ,我会得到以下消息:

    [
        {
            "_id" : "meteor.meteor",
            "user" : "meteor",
            "db" : "meteor",
            "roles" : [
                {
                    "role" : "readWrite",
                    "db" : "meteor"
                }
            ]
        }
    ]
    
  • 如果我注释掉配置中的两条安全线,那么我就可以从Meteor或RoboMongo访问MongoDB而不会出现问题-使用
    MongoDB:127.0.0.1:27017/Meteor
    。如果我取消对配置中的两条安全线的注释,那么我将无法再从Meteor或MongoDB访问MongoDB-使用
    mongodb://meteor:password@127.0.0.1:27017/meteor
    。在最后一个实例中,我继续得到身份验证失败的消息。在MongoDB日志中,我有:

    authenticate db: meteor { authenticate: 1, nonce: "xxx", user: "meteor", key: "xxx" }
    2015-03-08T14:34:44.909+0100 I ACCESS   [conn7] Failed to authenticate meteor@meteor with mechanism MONGODB-CR: AuthenticationFailed UserNotFound Could not find user meteor@meteor
    
    更新
    下面的答案和上面的配置在v2.6.7上运行,我没有看到您描述的问题,也没有看到代码,也不知道您是如何“打开”MongoDB身份验证的,我需要猜测一下,所以让我们关注一下是什么让事情对我起作用

    您应该检查用户的创建位置。在MongoDB中有多个数据库,每个数据库都有自己的用户。使用连接字符串时

    mongodb://username:password@127.0.0.1:27017/meteor
    
    您正在对meteor数据库进行身份验证。使用诸如RoboMongo之类的工具,我会检查用户是否确实在该数据库中,或者您是否在
    admin
    (或任何其他)数据库中创建了它

    作为简要说明: 保护MongoDB时,需要设置管理员帐户,更改包含行
    auth=true
    MongoDB.conf
    文件,然后重新启动。然后使用管理员帐户创建一个新的(低权限)db用户,该用户只能访问
    meteor
    数据库。您可以像这样使用命令行执行此操作(代码为2.6,因为这是您的问题中的代码,并且将是下一个Meteor版本的默认代码):

    如果您在与Meteor相同的框中运行
    mongod
    ,我认为我们可以安全地排除数据库根本不会侦听请求的
    net.port
    net.bindIp
    配置设置的任何问题


    如果您完成了所有这些并重新启动了MongoDB,那么项目中的meteor重置可能有助于修复任何问题

    我在部署新VPS时遇到了同样的问题。 在这个新的VPS上,mongo版本是3.0.1 为了解决这个问题,需要在构建包之前进行meteor更新,并且可以正常工作
    (meteor版本:1.0.4.1)

    事实证明,对我来说,密码上有特殊字符,用户名上有一个破折号,一旦我简化了,一切都像变魔术一样顺利:(

    完美。根据你的建议,我选择了RoboMongo并用它创建了我的用户。一旦我这样做了,系统就会运行:)我想我在mongo命令处理器级别创建的地方/内容实际上没有发生。这就是新手的问题。谢谢你的帮助,非常感谢:)哦,我以为它已经修好了,但似乎我仍然有一个问题。。。有什么建议或者你需要更多的信息吗??谢谢:)MongoDB3可能太新了。下一个meteor 10.0.4将支持2.6,除非你想带头进行3.0的兼容性测试,否则我建议你现在继续使用2.6。谢谢,非常好的解释!一个小小的更正:在您的示例中,Mongo需要大写的
    角色
    。。。i、 e.^输入密码
    
    authenticate db: meteor { authenticate: 1, nonce: "xxx", user: "meteor", key: "xxx" }
    2015-03-08T14:34:44.909+0100 I ACCESS   [conn7] Failed to authenticate meteor@meteor with mechanism MONGODB-CR: AuthenticationFailed UserNotFound Could not find user meteor@meteor
    
    mongodb://username:password@127.0.0.1:27017/meteor
    
    db.createUser(
      { user: "username",
        pwd: "password",
        roles: [
          { role: "readwrite", db: "meteor" } 
        ]
    })