如果我在本地运行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"
=============================================== ==
我以为我得到了上面的答案,但不是,我提出了建议的更改,但仍然无法进行身份验证。所以,提供更多细节:
我的配置文件如下:
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)
在&#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
然后我在&#34; meteor&#34;上创建了一个用户数据库
use admin
db.createUser({user: "superuser", pwd: "password", roles:["root"]})use admin
上述步骤生成:
db.auth("superuser", "password")
use meteor
db.createUser({user: "meteor", pwd: "password", roles: [{ role: "readWrite", db: "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日志中,我有:
mongodb://meteor:password@127.0.0.1:27017/meteor
以下答案和上面的配置适用于v2.6.7
答案 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" }
]
})
,我认为我们可以安全地排除mongod
或net.port
配置设置的任何问题,而数据库根本不会听取请求。
如果您完成了所有这些并重新启动了MongoDB,那么项目中的net.bindIp
可能有助于修复任何问题。
答案 1 :(得分:2)
对我来说,这只是关于密码上的特殊字符和用户名上的破折号,一旦我更简单,它就像魔法一样:(
答案 2 :(得分:0)
当我在新的VPS上部署时,我遇到了同样的问题。 在这个新的VPS上,mongo版本是3.0.1 为了解决这个问题,在构建软件包之前进行了一次流星更新 (流星版:1.0.4.1)