Search code examples
javascriptnode.jsmongodbmongodb-query

how to check if database needs auth or not


I'm working on a project which allows user to login to a mongodb database. Basically I have

db.authenticate(username, password, function(err, isAuthPass) {...}

to check if the user pass the authentication. However, sometimes the server doesn't need authentication. If I provide username/password, it will fail. So I need to know how to check auth mode with mongo-native-client. Any idea?


Solution

  • Well I suppose you could just interrogate the database for the config information. This does come with the caveat that you should also be using the "test/fail" methods as discussed before as you would not be able to get this information from a server with authentication enabled that is not running on localhost:

    var mongo = require('mongodb'),
        MongoClient = mongo.MongoClient;
    
    
    MongoClient.connect('mongodb://localhost:30000/test',function(err,db) {
    
      var adminDb = db.admin();
    
      adminDb.command({ "getCmdLineOpts": 1 },function(err,result) {
        console.log( JSON.stringify( result, undefined, 4 ) );
      });
    
    });
    

    That shows the "parsed" options, and it does not matter whether they are actually sent from the command line or picked up from a config file as the output here suggests:

    {
        "documents": [
            {
                "argv": [
                    "mongod",
                    "--config",
                    "mongod.conf"
                ],
                "parsed": {
                    "config": "mongod.conf",
                    "net": {
                        "bindIp": "0.0.0.0",
                        "port": 30000
                    },
                    "security": {
                        "authorization": "enabled"
                    },
                    "storage": {
                        "dbPath": "data"
                    },
                    "systemLog": {
                        "destination": "file",
                        "logAppend": true,
                        "path": "log/mongod.log"
                    }
                },
                "ok": 1
            }
        ],
        "index": 338,
        "messageLength": 338,
        "requestId": 25,
        "responseTo": 3,
        "responseFlag": 8,
        "cursorId": "0",
        "startingFrom": 0,
        "numberReturned": 1
    }
    

    So here the presence of "security.authorization.enabled": true tells you that further operations are going to require authorized credentials to be supplied.

    Also see getCmdLineOpts and other diagnostic information commands that should be useful for your tool.