Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用本机节点在MongoDB中进行身份验证_Javascript_Node.js_Mongodb_Mongohq - Fatal编程技术网

Javascript 使用本机节点在MongoDB中进行身份验证

Javascript 使用本机节点在MongoDB中进行身份验证,javascript,node.js,mongodb,mongohq,Javascript,Node.js,Mongodb,Mongohq,我在Nodejitsu/MongoHQ应用程序的MongoDB中保存文档时遇到问题。在本地,所有这些都可以正常工作,但是MongoHQ db需要身份验证,并且在用户/pass正常工作时失败(使用相同的凭据连接到MongoDB shell也可以正常工作)。以下是函数: var update_user = function(user, callback) { var client = new Db(db, new Server(host, port, {})); var updat

我在Nodejitsu/MongoHQ应用程序的MongoDB中保存文档时遇到问题。在本地,所有这些都可以正常工作,但是MongoHQ db需要身份验证,并且在用户/pass正常工作时失败(使用相同的凭据连接到MongoDB shell也可以正常工作)。以下是函数:

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);
        });
    });
}
我做错了什么

authenticate方法的UPD:err参数具有以下值:

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

我再次检查了存储的密码和用户名,它们用于登录MongoHQ shell。

如果您的凭据是管理员用户帐户,请在您的
身份验证
呼叫中访问管理员数据库:

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

具体失败在哪里?您的
客户端.authenticate
回调的
err
参数是否包含任何线索?看起来你只是忽略了它。@JohnnyHK:用错误消息更新了我的答案。如果你的用户帐户是管理员用户,你必须特别登录到管理员数据库。它是管理员帐户吗?