无法db.authenticate() - "找不到用户"

时间:2016-07-27 12:11:21

标签: node.js mongodb

我有一个本地测试环境,在localhost上有一个mongod和一个db" test"与用户" john"。在robomongo中,用户" john"在db" test"中显示。

在我的Node.js程序中:

  • 我通过URI连接" mongodb:// localhost:27017" (未指定数据库)
  • db.db(" test") - >确定
  • db.authenticate(" john"," xxx") - > err.message是"身份验证失败"

本地主机上的Mongod:" UserNotFound:找不到用户john @ test"

如何在数据库中创建用户" test"并对#34; test"?

进行身份验证

由于

2 个答案:

答案 0 :(得分:0)

为了能够进行身份验证,用户必须位于admin数据库中。

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

您可以在doc

中找到更多详情

答案 1 :(得分:0)

如果您使用来自http://mongodb.github.io/node-mongodb-native/2.1/api/的mongo驱动程序(使用Bluebird promises和typescript),请确保您拥有管理员或用户以及添加用户的权限,然后:

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)基本连接到数据库,您需要将用户添加到具有添加用户权限的用户(如管理员)。在成功检索时,您将拥有db对象。

2)确定您要分配的角色,在这种情况下,我有硬编码&#39; readWrite&#39;。

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