无法在服务器 NodeJS 上的 Mongo 中创建用户(或基于自定义的角色)
Impossible to create users (or custom-based roles) in Mongo on server NodeJS
我正在尝试直接从我们的 Express 服务器在我的数据库上创建用户,对数据库使用 Mongo 3.4。这是现在服务器的代码:
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://mongo:27017/myDb';
var dbvotes = "collection1";
var dbusers = "collection2";
//Functions for users
app.post('/newUser', function(req, res, db) {
MongoClient.connect(url, function(err, db){
//Ecriture dans la base user
db.collection(dbusers).insertOne( {
"name" : req.body.name,
"surname" : req.body.surname,
"username" : username,
"password" : "pasadmin",
});
//Creation of the user in the DB
db.createUser( { 'user': username, 'pwd': "pasadmin", roles: [] });
db.close();
});
console.log("Inserted a new user in the database.");
res.send("User added. Click precedent to add a new user.");
});
但是,每当客户端尝试插入新用户时,它实际上是在用户集合中创建的,但不是作为数据库的用户,因为我收到以下错误:TypeError: db.createUser is not一个函数
web_1 |在 /app/app.js:47:6.
我曾尝试使用 db.addUser 代替,但是,自 Mongo 2.6 以来已弃用此方法并且两者均无效,并且 db.adminCommand 出现相同的错误,db.adminCommand不是函数。在此之前,我努力使用 Node 在数据库中创建自定义角色,并决定也通过 Mongo shell 来完成,但是在数据库。
当我在 Mongo shell 中使用这些函数时,命令正在运行,所以我想它来自我在服务器中实现 Mongo 的方式(通过 Docker),或者由于 Javascript 的一些限制。知道它会是什么吗?
提前感谢社区!
正确的命令是:
db.addUser( username, password, { roles: [ role ] } );
其中 role
是一些 MongoDB role. More info can be found from the source file。也可以是{ role: <string>, db: <string> }
构成的对象,其中role是MongoDB角色,db是数据库的字符串名
您也可以使用 db.admin().addUser
。如果用户可以访问多个数据库或者您希望用户位于一个中心位置,这将是合乎逻辑的选择。
但是,我无法想象从您的应用程序添加系统用户是个好主意,除非您正在开发一个实际的管理工具。添加到数据库的正常 "users" 将在您自己的用户集合中。 system user 是可以直接访问您的数据库的人。
我正在尝试直接从我们的 Express 服务器在我的数据库上创建用户,对数据库使用 Mongo 3.4。这是现在服务器的代码:
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://mongo:27017/myDb';
var dbvotes = "collection1";
var dbusers = "collection2";
//Functions for users
app.post('/newUser', function(req, res, db) {
MongoClient.connect(url, function(err, db){
//Ecriture dans la base user
db.collection(dbusers).insertOne( {
"name" : req.body.name,
"surname" : req.body.surname,
"username" : username,
"password" : "pasadmin",
});
//Creation of the user in the DB
db.createUser( { 'user': username, 'pwd': "pasadmin", roles: [] });
db.close();
});
console.log("Inserted a new user in the database.");
res.send("User added. Click precedent to add a new user.");
});
但是,每当客户端尝试插入新用户时,它实际上是在用户集合中创建的,但不是作为数据库的用户,因为我收到以下错误:TypeError: db.createUser is not一个函数 web_1 |在 /app/app.js:47:6.
我曾尝试使用 db.addUser 代替,但是,自 Mongo 2.6 以来已弃用此方法并且两者均无效,并且 db.adminCommand 出现相同的错误,db.adminCommand不是函数。在此之前,我努力使用 Node 在数据库中创建自定义角色,并决定也通过 Mongo shell 来完成,但是在数据库。
当我在 Mongo shell 中使用这些函数时,命令正在运行,所以我想它来自我在服务器中实现 Mongo 的方式(通过 Docker),或者由于 Javascript 的一些限制。知道它会是什么吗?
提前感谢社区!
正确的命令是:
db.addUser( username, password, { roles: [ role ] } );
其中 role
是一些 MongoDB role. More info can be found from the source file。也可以是{ role: <string>, db: <string> }
构成的对象,其中role是MongoDB角色,db是数据库的字符串名
您也可以使用 db.admin().addUser
。如果用户可以访问多个数据库或者您希望用户位于一个中心位置,这将是合乎逻辑的选择。
但是,我无法想象从您的应用程序添加系统用户是个好主意,除非您正在开发一个实际的管理工具。添加到数据库的正常 "users" 将在您自己的用户集合中。 system user 是可以直接访问您的数据库的人。