2012-09-16 68 views
0

我在我的Nodejitsu/MongoHQ應用中在MongoDB中保存文檔時遇到問題。本地所有工作都很好,但MongoHQ db需要認證,並且工作用戶/密碼失敗(使用相同的憑據連接到MongoDB shell工作正常)。這裏是功能:在節點本地在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殼工作。

+0

這是哪裏專失敗?你的'client.authenticate'回調函數的'err'參數是否包含任何線索?看起來你只是忽略它而已。 – JohnnyHK

+0

@JohnnyHK:用錯誤信息更新了我的答案。 – skazhy

+0

如果您的用戶帳戶是管理員用戶,您必須專門登錄到管理數據庫。它是一個管理員帳戶嗎? – JohnnyHK

回答

2

如果你的憑據是一個管理員用戶帳戶您must target管理數據庫中的電話authenticate

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