Аутентификация в MongoDB с собственным узлом

У меня проблемы с сохранением документа в MongoDB в моем приложении Nodejitsu/MongoHQ. Локально все работает нормально, но для базы данных MongoHQ требуется аутентификация, и она не работает с рабочим пользователем/паролем (подключение к оболочке MongoDB с теми же учетными данными работает нормально). Вот функция:

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

Что я здесь делаю неправильно?

UPD: параметр err метода аутентификации имеет следующее значение:

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

Я снова проверил сохраненный пароль и имя пользователя, они работают для входа в оболочку MongoHQ.


person skazhy    schedule 16.09.2012    source источник
comment
Где конкретно не получается? Содержит ли параметр err обратного вызова client.authenticate какие-либо подсказки? Похоже, вы просто игнорируете это.   -  person JohnnyHK    schedule 16.09.2012
comment
@JohnnyHK: обновил мой ответ сообщением об ошибке.   -  person skazhy    schedule 16.09.2012
comment
Если ваша учетная запись пользователя является администратором, вы должны специально войти в базу данных администратора. Это учетная запись администратора?   -  person JohnnyHK    schedule 16.09.2012


Ответы (1)


Если ваши учетные данные предназначены для учетной записи администратора, вы должны настроить таргетинг база данных администратора в вашем authenticate вызове:

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