Meteor和MongoDB:身份验证失败

时间:2015-03-05 00:57:09

标签: mongodb meteor

如果我在本地运行Meteor,它可以完美运行。如果我用没有MONGO_URL的{​​{1}}来调用Meteor,它也可以完美地运行。但是,如果我打开MongoDB身份验证并重新启动,然后使用username:password设置运行Meteor,就像username:password一样,那么当Meteor加载时,我会收到身份验证失败。我检查过用户名和密码是否正确。我已经读过Meteor和MongoDB认证可能存在问题,所以有人对此有任何信息吗?我使用以下版本:

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

MONGO_URL="mongodb://username:password@127.0.0.1:27017/meteor"

=============================================== ==

我以为我得到了上面的答案,但不是,我提出了建议的更改,但仍然无法进行身份验证。所以,提供更多细节:

  1. 我已升级到MonogoDB 3.0.0
  2. 我删除了数据库,以便创建一个全新的数据库。
  3. 我的配置文件如下:

    I20150304-21:48:00.597(1)? Exception in callback of async function: MongoError: auth failed
    I20150304-21:48:00.598(1)?     at Object.toError (/Users/me/.meteor/packages/mongo/.1.0.11.1hg8e3j++os+web.browser+web.cordova/npm/node_modules/mongodb/lib/mongodb/utils.js:110:11)
    I20150304-21:48:00.598(1)?     at /Users/me/.meteor/packages/mongo/.1.0.11.1hg8e3j++os+web.browser+web.cordova/npm/node_modules/mongodb/lib/mongodb/db.js:1128:31
    I20150304-21:48:00.598(1)?     at /Users/me/.meteor/packages/mongo/.1.0.11.1hg8e3j++os+web.browser+web.cordova/npm/node_modules/mongodb/lib/mongodb/db.js:1843:9
    I20150304-21:48:00.598(1)?     at Server.Base._callHandler (/Users/me/.meteor/packages/mongo/.1.0.11.1hg8e3j++os+web.browser+web.cordova/npm/node_modules/mongodb/lib/mongodb/connection/base.js:445:41)
    I20150304-21:48:00.598(1)?     at /Users/me/.meteor/packages/mongo/.1.0.11.1hg8e3j++os+web.browser+web.cordova/npm/node_modules/mongodb/lib/mongodb/connection/server.js:468:18
    I20150304-21:48:00.598(1)?     at [object Object].MongoReply.parseBody (/Users/me/.meteor/packages/mongo/.1.0.11.1hg8e3j++os+web.browser+web.cordova/npm/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js:68:5)
    I20150304-21:48:00.599(1)?     at [object Object].<anonymous> (/Users/me/.meteor/packages/mongo/.1.0.11.1hg8e3j++os+web.browser+web.cordova/npm/node_modules/mongodb/lib/mongodb/connection/server.js:426:20)
    I20150304-21:48:00.599(1)?     at [object Object].emit (events.js:95:17)
    I20150304-21:48:00.599(1)?     at [object Object].<anonymous> (/Users/me/.meteor/packages/mongo/.1.0.11.1hg8e3j++os+web.browser+web.cordova/npm/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:201:13)
    I20150304-21:48:00.599(1)?     at [object Object].emit (events.js:98:17)
    
  4. 在&#34; admin&#34;数据库a&#34;超级用户&#34;已创建如下:

     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
    
  5. 然后我在&#34; meteor&#34;上创建了一个用户数据库

       use admin
       db.createUser({user: "superuser", pwd: "password", roles:["root"]})use admin
    
  6. 上述步骤生成:

       db.auth("superuser", "password")
       use meteor
       db.createUser({user: "meteor", pwd: "password", roles: [{ role: "readWrite", db: "meteor"}]})
    
  7. 如果我执行Successfully added user: { "user" : "meteor", "roles" : [ { "role" : "readWrite", "db" : "meteor" } ] } ,我会收到消息:

    db.getUsers()
  8. 如果我在配置中注释掉两条安全线,那么我可以使用[ { "_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日志中,我有:

    mongodb://meteor:password@127.0.0.1:27017/meteor

    更新

    以下答案和上面的配置适用于v2.6.7

3 个答案:

答案 0 :(得分:2)

我还没有看到你描述的问题,也没有看到代码或知道你是如何开启的。我需要猜测MongoDB身份验证 - 所以让我们专注于让事情适合我的事情。

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

mongodb://username:password@127.0.0.1:27017/meteor

您正在对meteor数据库进行身份验证。使用RoboMongo等工具我会检查用户是否确实在该数据库中,或者是否在admin(或任何其他)数据库中创建了该用户。

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

meteor

如果您在与Meteor相同的框中运行db.createUser( { user: "username", pwd: "password", roles: [ { role: "readwrite", db: "meteor" } ] }) ,我认为我们可以安全地排除mongodnet.port配置设置的任何问题,而数据库根本不会听取请求。

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

答案 1 :(得分:2)

对我来说,这只是关于密码上的特殊字符和用户名上的破折号,一旦我更简单,它就像魔法一样:(

答案 2 :(得分:0)

当我在新的VPS上部署时,我遇到了同样的问题。 在这个新的VPS上,mongo版本是3.0.1 为了解决这个问题,在构建软件包之前进行了一次流星更新 (流星版:1.0.4.1)