Невозможно создать пользователей (или пользовательских ролей) в Mongo на сервере NodeJS

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 не является функцией web_1 | на /app/app.js:47:6.

Я попытался использовать db.addUser вместо этого, однако это устарело, поскольку Mongo 2.6 и не работает, и db.adminCommand выполняет ту же ошибку, db.adminCommand не является функцией. До этого я изо всех сил пытался создавать пользовательские роли в базе данных с помощью Node и решил сделать это через оболочку Mongo, но это не вариант, когда дело доходит до добавления пользователя 1 к 1 в базе данных.

Когда я использую эти функции в оболочке Mongo, команды работают, поэтому я предполагаю, что это происходит из того, как я реализовал Mongo на сервере (через Docker) или из-за некоторых ограничений с Javascript. Любая идея, что это может быть?

Заранее благодарим сообщество!

Теги:
express

1 ответ

0
Лучший ответ

Правильная команда:

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

Где role - роль MongoDB. Более подробную информацию можно найти в исходном файле. Он также может быть объектом при создании { role: <string>, db: <string> }, где роль - роль MongoDB, а db - имя строки базы данных.

Вы также можете использовать db.admin().addUser. Это было бы логичным выбором, если бы пользователь имел доступ к нескольким базам данных или вам нужно было центральное расположение ваших пользователей.

Тем не менее, я не могу представить, что это хорошая идея добавить пользователей системы из вашего приложения, если вы не разрабатываете фактический административный инструмент. Обычные "пользователи", добавленные в базу данных, будут в вашей собственной коллекции пользователей. Пользователь системы - это тот, кто имеет прямой доступ к вашей базе данных.

  • 0
    Спасибо за помощь! Тем не менее, это не похоже на работу. Использование db.admin (.). AddUser дает мне следующее сообщение: Создание пользователя без ролей не рекомендуется в MongoDB> = 2.6, что кажется логичным, поскольку я использую MongoDB 3.4. Что касается второй части сообщения, то это серьезная проблема, но мы разрабатываем это приложение для курса безопасности как приложение контроля доступа в MongoDB, и для нас полезно, чтобы каждый пользователь получал профиль в БД , как в коллекции, так и в качестве пользователя.
  • 0
    Я отредактировал свой комментарий. Полученное вами сообщение было просто предупреждением, но я прислушаюсь к нему и передам роль (по умолчанию dbOwner и, возможно, в какой-то момент прервется). Похоже, что драйвер не следует обычному MongoDB и сохраняет addUser на db .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню