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?

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.

Sometimes? always use a password. and if you don't need one, like your local environment, you should use a config file for that environment like ./config/dev.js which has the credentials for that environment.