Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

loopback mongodb Authentication failed

I have an empty loopback app, where I added a model and a mongodb datasource.

When connecting, I get the following error:

Web server listening at: http://0.0.0.0:3000
Browse your REST API at http://0.0.0.0:3000/explorer
Connection fails:  { [MongoError: Authentication failed.]
  name: 'MongoError',
  message: 'Authentication failed.',
  ok: 0,
  code: 18,
  errmsg: 'Authentication failed.' }
It will be retried for the next request.

/media/[...]/node_modules/mongodb/lib/mongo_client.js:454
              throw err
              ^
MongoError: Authentication failed.
    at Function.MongoError.create (/media/[...]/node_modules/mongodb-core/lib/error.js:31:11)
    at /media/[...]/node_modules/mongodb-core/lib/topologies/server.js:778:66
    at Callbacks.emit (/media/[...]/node_modules/mongodb-core/lib/topologies/server.js:95:3)
    at null.messageHandler (/media/[...]/node_modules/mongodb-core/lib/topologies/server.js:249:23)
    at Socket.<anonymous> (/media/[...]/node_modules/mongodb-core/lib/connection/connection.js:265:22)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at readableAddChunk (_stream_readable.js:153:18)
    at Socket.Readable.push (_stream_readable.js:111:10)
    at TCP.onread (net.js:531:20)

The db runs in a docker. I can connect to it via "MongoClient"

datasources.js:

{
    "mongodb_dev": {
        "name": "mongodb_dev",
        "connector": "mongodb",
        "host": "127.0.0.1",
        "database": "some-db",
        "username": "mongouser",
        "password": "pass",
        "port": 27017
    }
}
like image 608
Alexander Avatar asked May 11 '16 15:05

Alexander


1 Answers

The following might be the reason for this error.

  1. You are authenticating against one database and using some other database for your application. In your mongoClient you might be configured auth db as "admin" so you can connect without error.

If so you can solve this by creating users in your database by using

use application dbname
db.createUser(
   {
     user: "username",
     pwd: "password",
     roles: [ "readWrite", "dbAdmin" ]
   }
)

And use this credential for connecting your database

like image 164
nijin aniyath Avatar answered Oct 16 '22 23:10

nijin aniyath