Meteor和MongoDB:身份验证失败
如果我在本地运行Meteor,它会工作得很好。如果我用一个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
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
Successfully added user: {
"user" : "meteor",
"roles" : [
{
"role" : "readWrite",
"db" : "meteor"
}
]
}
db.getUsers()
,我会得到以下消息:
[
{
"_id" : "meteor.meteor",
"user" : "meteor",
"db" : "meteor",
"roles" : [
{
"role" : "readWrite",
"db" : "meteor"
}
]
}
]
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" }
]
})