无法在服务器 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 是可以直接访问您的数据库的人。