1

我正在尝试直接从我们的 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 a function web_1 | 在 /app/app.js:47:6。

我尝试使用 db.addUser 代替,但是,自 Mongo 2.6 以来已弃用,并且也无法正常工作,并且 db.adminCommand 出现相同的错误, db.adminCommand 不是函数。在此之前,我努力使用 Node 在数据库中创建自定义角色,并决定也通过 Mongo shell 来实现,但在数据库中逐个添加用户时,这不是一个选项。

当我在 Mongo shell 中使用这些函数时,命令正在运行,所以我想它来自我在服务器中实现 Mongo 的方式(通过 Docker),或者由于 Javascript 的一些限制。知道会是什么吗?

提前感谢社区!

4

1 回答 1

1

正确的命令是:

db.addUser( username, password, { roles: [ role ] } );

role一些MongoDB 角色在哪里。更多信息可以从源文件中找到。它也可以是 形式的对象{ role: <string>, db: <string> },其中角色是 MongoDB 角色,db 是数据库的字符串名称。

您也可以使用db.admin().addUser. 如果用户可以访问多个数据库或者您想要用户的中心位置,这将是合乎逻辑的选择。

但是,除非您正在开发实际的管理工具,否则我无法想象从您的应用程序中添加系统用户是一个好主意。添加到数据库的普通“用户”将位于您自己的用户集合中。系统用户是可以直接访问您的数据库的人。

于 2017-11-22T19:20:52.237 回答