skazhy
skazhy

Reputation: 4651

Authenticating in MongoDB with node-native

I'm having problems with saving a document in MongoDB in my Nodejitsu/MongoHQ app. Locally all works fine, but the MongoHQ db requires authentification and it fails with working user/pass (connecting to MongoDB shell with the same credentials works fine). Here is the function:

var update_user = function(user, callback) {

    var client = new Db(db, new Server(host, port, {}));
    var update = function (err, collection) {
        collection.findOne({uid:user.id}, function(err, doc) {
            if (err) { throw err; }
            if (!doc) doc = { uid: user.id }
            doc.img = user.img;
            doc.name = user.name;

            collection.save(doc, {safe: true}, function(err, doc) {
                if (err) { throw err; }
                callback(user);
            });
        });
    };

    client.open(function(err, client) {
        if (err) { throw err; }
        client.authenticate(user, pass, function(err, result) {
            client.collection('users', update);
        });
    });
}

What I'm doing wrong here?

UPD: err parameter of authenticate method has the following value:

{ [MongoError: auth fails] name: 'MongoError', errmsg: 'auth fails', ok: 0 }

I checked the stored password & username again, they work for logging in the MongoHQ shell.

Upvotes: 0

Views: 1493

Answers (1)

JohnnyHK
JohnnyHK

Reputation: 311835

If your credentials are for an admin user account you must target the admin database in your authenticate call:

client.authenticate(user, pass, {authdb: 'admin'}, function(err, result) {
    client.collection('users', update);
});

Upvotes: 2

Related Questions