2017-11-22 2 views
1

zu erstellen. Ich versuche, Benutzer in meiner Datenbank direkt von unserem Express-Server mit Mongo 3.4 für die Datenbank zu erstellen. Hier ist der Code für den Server jetzt:Es ist nicht möglich, Benutzer (oder benutzerdefinierte Rollen) in Mongo auf dem Server NodeJS

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."); 
}); 

Jedes Mal, wenn der Client einen neuen Benutzer einzufügen versucht wird effektiv in den Benutzern Sammlungen erstellt, aber nicht als Benutzer der Datenbank, wie ich das bekommen Folgefehler: TypeError: db.createUser ist keine Funktion web_1 | bei /app/app.js:47:6.

Ich habe versucht, Benutzer db.addUser stattdessen, dies ist jedoch veraltet seit Mongo 2.6 und funktioniert nicht, und db.adminCommand dient den gleichen Fehler, db.adminCommand ist keine Funktion. Davor hatte ich Probleme, benutzerdefinierte Rollen in der Datenbank mit Node zu erstellen, und entschied mich dafür, dies auch über die Mongo-Shell zu tun, aber es ist keine Option, wenn es darum geht, Benutzer 1 zu 1 in der Datenbank hinzuzufügen.

Wenn ich diese Funktionen in der Mongo-Shell verwende, funktionieren die Befehle, also nehme ich an, dass es von der Art der Implementierung von Mongo innerhalb des Servers (über Docker) oder aufgrund einiger Einschränkungen mit Javascript kommt. Irgendeine Idee, was könnte es sein?

Vielen Dank im Voraus an die Gemeinde!

Antwort

0

wäre der richtige Befehl sein:

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

Wo role einige MongoDB role ist. Weitere Informationen finden Sie unter the source file. Es kann auch ein Objekt in der Formation { role: <string>, db: <string> } sein, wobei Rolle eine MongoDB-Rolle und db der Zeichenfolgenname der Datenbank ist.

Sie können auch db.admin().addUser verwenden. Dies wäre die logische Wahl, wenn der Benutzer Zugriff auf mehrere Datenbanken hat oder einen zentralen Standort für Ihre Benutzer haben möchte.

Ich kann mir jedoch nicht vorstellen, dass es eine gute Idee ist, Systembenutzer aus Ihrer Anwendung hinzuzufügen, es sei denn, Sie entwickeln ein echtes Verwaltungstool. Normale "Benutzer", die zu einer Datenbank hinzugefügt werden, befinden sich in Ihrer eigenen Benutzersammlung. Ein system user ist jemand, der direkten Zugriff auf Ihre Datenbank hat.

+0

Danke für die Hilfe! Dies scheint jedoch nicht zu funktionieren. Die Verwendung von db.admin (.). AddUser gibt mir folgende Nachricht: Das Erstellen eines Benutzers ohne Rollen ist in MongoDB> = 2.6 veraltet, was logisch erscheint, wenn ich MongoDB 3.4 verwende. Wie für den zweiten Teil der Nachricht, ist es ein berechtigtes Anliegen, aber wir entwickeln diese Anwendung für einen Sicherheitskurs als eine Anwendung der Zugriffskontrolle in MongoDB, und es ist vorteilhaft für uns, dass jeder Benutzer ein Profil in erhält die DB, sowohl in der Sammlung als auch als Benutzer. –

+0

Ich habe meinen Kommentar bearbeitet. Die Nachricht, die Sie erhalten haben, war nur eine Warnung, aber ich würde es beherzigen und eine Rolle übergeben (standardmäßig dbOwner und wird wahrscheinlich irgendwann kaputt gehen). Es sieht so aus, als ob der Treiber der normalen MongoDB nicht folgt und 'addUser' in' db' behält. – vox

+0

Es funktioniert, wenn eine Rolle hinzugefügt wird! Ich werde den Rest des Codes anpassen, so dass wir weiter an diesem Code arbeiten. Vielen Dank, Vox, für Ihre Zeit und Ihr Fachwissen! –

Verwandte Themen