使用DoctrineMongoDBBundle进行身份验证

Zai*_*dar 3 authentication mongodb symfony

我目前正在开发一个项目,我使用mongodb作为数据库,我开始在symfony config.yml的mongo配置中没有安全性.

这是我的config.yml自项目开始以来的样子.

doctrine_mongodb:
connections:
    default:
        server: mongodb://localhost:27017
        options: {}
default_database: louisv
document_managers:
    default:
        auto_mapping: true
Run Code Online (Sandbox Code Playgroud)

通过这些参数,该项目非常有效.

但我想为mongodb数据库添加安全性.所以我尝试按照mongodb上的文档来创建用户.我为admin数据库创建了一个"admin"用户,为louisv数据库创建了一个"louisv"用户(admin数据库是默认存在的数据库,louisv是我的).

现在我想让Symfony使用这个新用户.我从conf.yml文件中更改了选项参数,现在这就是我所拥有的:

doctrine_mongodb:
connections:
    default:
        server: mongodb://localhost:27017
        options:
            username: louisv
            password: password
default_database: louisv
document_managers:
    default:
        auto_mapping: true
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试在Symfony中输入我的应用程序时

无法连接到:localhost:27017:使用用户名'louisv'在数据库'admin'上进行身份验证失败:auth失败

这是奇怪的,因为我的default_database是"louisv"而不是'admin'.

如果我将凭据更改为admin的凭据,我还有另一个错误:

localhost:27017:未授权在louisv.User上查询

这似乎很好,因为它似乎搜索用户,但我不能做查询.

Der*_*ick 8

代替:

server: mongodb://localhost:27017
Run Code Online (Sandbox Code Playgroud)

以下应该做的伎俩:

server: mongodb://localhost:27017/louisv
Run Code Online (Sandbox Code Playgroud)

显然,Doctrine ODM捆绑包现在也有一个"db"选项,因此您现在有以下选项:

connections:
    default:
        server: mongodb://louisv:password@localhost:27017/louisv
Run Code Online (Sandbox Code Playgroud)

要么

connections:
    default:
        server: mongodb://localhost:27017
        options:
            username: louisv
            password: password
            db: louisv
Run Code Online (Sandbox Code Playgroud)

第一个选项是首选,因为它允许在连接断开时自动重新验证.

也可以看看: