mongodb atlas上的快速护照注册错误
Posted
技术标签:
【中文标题】mongodb atlas上的快速护照注册错误【英文标题】:express passport register error on mongodb atlas 【发布时间】:2018-08-06 07:38:16 【问题描述】:我在运行护照注册功能时收到以下消息。我在连接字符串中使用了用户/密码,所以我不知道这个管理业务来自哪里。
Mongoose:accounts.findOne( '$or': [ username: 'test1' ] , fields: hash: 0, salt: 0 ) REGISTER err MongoError: cannot do raw queries on admin in atlas
连接命令
mongoose.set('debug', true)
mongoose.connect('mongodb+srv://user:password@cluster*-qns*s.mongodb.net/node-authdb', function(err, client)
assert.equal(null, err);
console.log("Connected successfully to server");
);
注册码
router.post('/register', function(req, res)
Account.register(new Account( username : req.body.username ), req.body.password, function(err, account)
if (err)
console.log("REGISTER err " + err);
return res.render('register', account : account );
编辑
我使用 dbAdmin@node-authdb (Role) 创建了一个新用户 (newuser@admin),现在我拥有:
MongoError: user is not allowed to do action [find] on [admin.$cmd]
也许我需要使用特定的角色组合?
提前致谢
【问题讨论】:
【参考方案1】:据我所知,我无法使用mongodb+srv
协议连接到 MongoDB Atlas,同时在与admin
不同的数据库中写入数据。
您处于免费层,因此您没有权限使用 admin
数据库上的某些功能,但即使您升级到付费层,您最终也会在 admin
数据库中写入。
所以,最后,我使用replicaSet
进行连接:
// Connect mongoose
const dbCredentials = !_.isEmpty(config.db.user) ?
`$config.db.user:$config.db.pwd@` : '';
let mongooseOptions =
autoIndex: true,
;
if (isProduction)
mongooseOptions = _.extend(mongooseOptions,
ssl: true,
authSource: 'admin',
replicaSet: config.db.replicaSet,
);
const uri = `$config.db.protocol://$dbCredentials$config.db.host/$config.db.name`;
mongoose.connect(uri, mongooseOptions, (err) =>
if (err)
console.error('Could not connect to mongodb', err);
else
console.log('Connected to mongo', config.db.name);
);
mongoose.set('debug', isDevelopment);
mongoose.Promise = global.Promise;
【讨论】:
以上是关于mongodb atlas上的快速护照注册错误的主要内容,如果未能解决你的问题,请参考以下文章
使用护照使用 NodeJs mongodb(mongoose) express 的注册表单
将 Elastic Beanstalk 上的 Web 服务器与 MongoDB Atlas 上的数据库服务器连接时出错