2016-09-09 5 views
0

Ich erhalte immer einen Fehler beim Versuch, eine Sammlung auf einem Mongodb abzufragen, mit dem ich in meiner Datei app.js erfolgreich Verbindung hergestellt habe.Mongodb-Authentifizierung mit Nodejs und Mönch

var mongo = require('mongodb'); 
var monk = require('monk'); 
var db = monk('mongodb://USERNAME:[email protected]:27017/test_db'); 

var app = express(); 

// Make our db accessible to our router 
app.use(function(req,res,next){ 
     req.db = db; 
     next(); 
}); 

Es verbindet und dann in meinem Router-Datei:

/* users.js*/ 

router.post('/login', function(req, res, next) { 

    var params = req.body; 
    var userid = params.userid; 
    var pw  = params.password 
    var db = req.db; 
    var userdb = db.get('users'); 
    userdb.findOne({'userid' : userid}, function(e,user) { 
    if (e) { 
     console.log("error reading user doc ->"); 
     console.log(e); 
     return; 
    } else { 
     .... 
    } 
    }); 
}); 

Ich erhalte die folgende Fehlermeldung nach der Sammlung Abfrage:

{ [MongoError: auth failed] name: 'MongoError', ok: 0, errmsg: 'auth failed', code: 18 } 
+0

Die Formatierung Mönch (URL, {Benutzername, Passwort}) funktionierte nicht. Das Problem war URI Codierung das Passwort für Sonderzeichen zu ermöglichen, wenn Sie das Objekt übergeben müssen {uri_decode_auth: true} – dancook808

Antwort

1
var db = monk('localhost:27017/test_db', { 
    username : 'USERNAME', 
    password : 'PASSWORD' 
}); 
or 
var db = monk('USERNAME:[email protected]:27017/test_db'); 
+0

Ihre zweite Option funktioniert, aber ich konnte nicht die erste funktionieren. –

3

Sehen Sie sich die MongoDB-Dokumentation für Optionen :

http://mongodb.github.io/node-mongodb-native/2.1/reference/connecting/connection-settings/

Sie werden feststellen, dass Benutzername und Passwort keine gültigen Optionen sind. Wenn Sie sich mit test_db verbinden und sich Ihr root-Benutzer in einer anderen Datenbank befindet (sagen wir admin), sollten Sie authSource: admin verwenden. Sie Verbindungszeichenfolge würde wie folgt aussehen:

var db = monk('user:[email protected]:27017/test_db',{authSource:'admin'}); 

Das verwirrte mich, als ich versuchte zu meiner Datenbank zu verbinden, aber meine Auth Benutzer war in einem anderen.

Hoffe es hilft jemandem!