2016-07-27 127 views
0

我有一个本地测试环境,在localhost上有一个mongod,在用户“john”上有一个db“test”。在robomongo中,用户“john”显示在db“test”中。无法db.authenticate() - “无法找到用户”

在我的Node.js程序:

  • 我通过URI连接 “的mongodb://本地主机:27017”(指定数据库)
  • db.db( “测试”) - >确定
  • db.authenticate( “约翰福音”, “XXX”) - > err.message是 “验证失败”

的mongod在localhost: “UserNotFound:找不到用户john @测试”

如何在数据库中创建用户“测试”并通过“测试”进行身份验证?

谢谢

+0

https://docs.mongodb.com/manual/core/security-users/ – TW80000

+0

请在测试数据库中提供运行“show users”的输出。 – helmy

+0

您是使用节点mongodb驱动程序还是像猫鼬一样使用orm? –

回答

0

为了能够进行身份验证,用户必须在管理数据库中。

通过创建一个可以访问“test”数据库并分配给用户“john”的角色,授予它访问权限。

如果您(使用蓝鸟的承诺,打字稿)确保你有一个管理员或用户与权限,添加用户,然后使用蒙戈驾驶员http://mongodb.github.io/node-mongodb-native/2.1/api/你可以找到在doc

0

更多细节:

MongoClient.connect('mongodb://localhost:27017/test') 
    .then(
     (db) => { 
      return db.authenticate(
       <admin from above username>, 
       <admin from above password> 
      ) 
      .then(
       (success) => { 
        if(success) { 
         return Promise.resolve(db) 
        } else { 
         return Promise.reject('Yikes!'); 
        } 
       } 
      ) 
     } 
    ) 
    .then(
     (db) => { 
      const options = { 
       w: 1, 
       roles: ['readWrite'] 
      } 
      return db.addUser(
       <username>, 
       <password>, 
       options 
      ) 
     } 
    ); 

1)基本上连接到数据库,你需要添加用户作为用户有权添加用户(如管理员)。在成功的检索你将有数据库对象。

2)确定你想分配哪些角色,在这种情况下,我已经硬编码'readWrite'。

3)用用户名和密码(以及作为角色的选项)调用db.addUser。 http://mongodb.github.io/node-mongodb-native/2.1/api/Db.html#addUser

+0

感谢所有的好评! 这是有趣的。我阅读和了解MongoDB的认证越多,我就越感到困惑。 在我的本地主机上,我删除并创建了一个新的测试数据库。在这个数据库(而不是“管理员”),我添加了能够进行身份验证的ohne。这与一些文档形成鲜明对比,这些文档引导我在“admin”中添加所有用户。 那么什么是“正确”的方式?我的MongoDB服务器需要托管多个应用程序,这些应用程序有自己的用户。 –

+0

我正在开发一个应用程序,每个客户端都有自己的数据库,因此我将用户添加到每个客户端的相应数据库中,如我的答案中所述。然而,所有用户都存储在管理数据库中,因此您可以搜索'system.users'表并查找有关它们的信息(如它们是否存在)。 –