Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using authentication with DoctrineMongoDBBundle

I'm currently working on a project where I use mongodb as database, and I began with no security in my mongo configuration of the symfony config.yml.

This is what my config.yml looked like since the beginning of the project.

doctrine_mongodb:
connections:
    default:
        server: mongodb://localhost:27017
        options: {}
default_database: louisv
document_managers:
    default:
        auto_mapping: true

With this parameters the project works very well.

But I want to add security to mongodb database. So I tried to follow documentation on mongodb to create users. I created an "admin" user for the admin database, and a "louisv" user for the louisv database (the admin database is the database existing by default, and louisv is mine).

Now I want to Symfony to use this new user. I changed my the option parameters from my conf.yml file and now this is what I have :

doctrine_mongodb:
connections:
    default:
        server: mongodb://localhost:27017
        options:
            username: louisv
            password: password
default_database: louisv
document_managers:
    default:
        auto_mapping: true

Now when I try to enter my application in Symfony

Failed to connect to: localhost:27017: Authentication failed on database 'admin' with username 'louisv': auth fails

Which is weird cause my default_database is "louisv' and not 'admin'.

And if I change the credentials to admin's ones, I have another error:

localhost:27017: not authorized for query on louisv.User

Which seems quite good as it seems to search for users, but I can't do queries.

like image 916
JeanDavidDaviet Avatar asked Mar 04 '26 02:03

JeanDavidDaviet


1 Answers

Instead of:

server: mongodb://localhost:27017

The following should do the trick:

server: mongodb://localhost:27017/louisv

Apparently, the Doctrine ODM bundle also has a "db" option now, so you now have the following options:

connections:
    default:
        server: mongodb://louisv:password@localhost:27017/louisv

or

connections:
    default:
        server: mongodb://localhost:27017
        options:
            username: louisv
            password: password
            db: louisv

The first option is preferred, as it allows for automatic re-authentication in case a connection drops.

See also:

  • https://github.com/doctrine/DoctrineMongoDBBundle/issues/154
like image 79
Derick Avatar answered Mar 06 '26 18:03

Derick



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!