之前本人mongdb一直裸跑,学到用户认证后决定给mongodb加个管理员用户,就是在system.admin.user中添加个用户。原程序中链接数据库部分使用的是mongoose来实现的 exports.Connection = mongoose.connect('mongodb://locahost:27017/db);(之前是裸跑所用没有用户名和密码直接就连上了) 可是我改为 exports.Connection = mongoose.connect('mongodb://root:123456@locahost:27017/db); 提示: MongoError: auth fails 百度后发现这个用户名密码不是db这个数据库的,所以认证失败
后来查阅<a href=“http://mongoosejs.com/docs/api.html#connection_Connection-open”>mongoose API</a> 发现open方法中好像有auth参数 又改成 var db = exports.Connection = mongoose.createConnection(); var options = { db:{native_parser:true}, server:{poolSize:5}, auth:{ user:“root”, pass:123456 } } db.open(settings.host, settings.db, settings.port, options); 结果还是无法向db数据库中操作数据 最后问题是,我的管理员账户是在system.admin.User中,如何认证通过?通过后又如何操作其他数据库(本例中为db)中的数据? 在原生的mongodb中好像有db.auth(“root”,“123456”) 返回1就是认证通过,那么在mongoose中如何实现呢? 请教各位大牛们,谢谢!
mongoose 连接db的方式
mongoose.connect('mongodb://username:password@host:port/database?options...');
不过前提是,你这个用户有操作数据库的权限。 输入 ./mongo 进入控制台,切换到 指定的数据库
show users
{
"_id" : "test.liux",
"user" : "liux",
"db" : "test",
"roles" : [
{
"role" : "dbOwner",
"db" : "test"
}
]
}
db 的名字是test ,能够登陆的用户是 liux 不知道你的是否是这样。如果两项都满足,肯定能登陆成功的
mongoose 的 open 发现有个坑!我改成 openSet 就可以了,比如: db.openSet(“mongodb://admin:pass@192.168.1.100:27017/mydb”);
请问,同样的问题,试了n多方法,包括你的方法,依然报错,详见这个帖子
@highsea 多谢指导
如果密码中有@这样的字符如何办?
如果 mongo 里用 db.createUser( { user: “root”, pwd: “adminpwd”, roles: [ “root” ] } ) 创建用户的话 moogoose 这样 connect 就可以了
mongoose.connect('mongodb://root:adminpwd@127:0:0:1:27017/db?authSource=admin')
@Naraku777 谢谢,认证成功并连上了