当mongodb开启用户认证后(auth=true),如何使用mongoose链接数据库
发布于 10 年前 作者 perny 51175 次浏览 最后一次编辑是 8 年前

之前本人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中如何实现呢? 请教各位大牛们,谢谢!

7 回复

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多方法,包括你的方法,依然报错,详见这个帖子

如果密码中有@这样的字符如何办?

如果 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 谢谢,认证成功并连上了

回到顶部