Я пытаюсь создать пользователей в своей базе данных непосредственно с нашего сервера 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. Любая идея, что это может быть?
Заранее благодарим сообщество!
Правильная команда:
db.addUser( username, password, { roles: [ role ] } );
Где role
- роль MongoDB. Более подробную информацию можно найти в исходном файле. Он также может быть объектом при создании { role: <string>, db: <string> }
, где роль - роль MongoDB, а db - имя строки базы данных.
Вы также можете использовать db.admin().addUser
. Это было бы логичным выбором, если бы пользователь имел доступ к нескольким базам данных или вам нужно было центральное расположение ваших пользователей.
Тем не менее, я не могу представить, что это хорошая идея добавить пользователей системы из вашего приложения, если вы не разрабатываете фактический административный инструмент. Обычные "пользователи", добавленные в базу данных, будут в вашей собственной коллекции пользователей. Пользователь системы - это тот, кто имеет прямой доступ к вашей базе данных.
addUser
наdb
.