首页 > 解决方案 > Laravel + MongoDB:无法验证

问题描述

我有一个mongodb,在admin中定义了一个用户,如下

{
    "_id" : "admin.realtebo",
    "user" : "realtebo",
    "db" : "admin",
    "roles" : [
            {
                    "role" : "root",
                    "db" : "admin"
            },
            {
                    "role" : "readWriteAnyDatabase",
                    "db" : "admin"
            }
    ],
}

从 linux shell 工具中使用此凭据时mongo,我可以成功地对 mongo 安装中的每个数据库执行任何我想做的事情

我输入了以下(并且它们是正确的)数据到我的.env

DB_CONNECTION=mongodb
DB_HOST=127.0.0.1
DB_PORT=27017
DB_DATABASE=dev_db
DB_USERNAME=realtebo
DB_PASSWORD=<mypasswor>

Laravel 无法连接

MongoDB \ Driver \ Exception \ AuthenticationException (11)
Authentication failed.

我确信这不是 Laravel 或配置问题,因为同一个应用程序可以成功连接到远程 mongodb。

抱歉,这个菜鸟问题,但是..如何在 mongo 的管理数据库中设置用户以便realtebo可以读写dev_db?我必须明确添加用户dev_db吗?

在此先感谢,我敢肯定这是愚蠢的。

标签: mongodbnosql

解决方案


如果是 jenssegers 的 mongodb,需要在 config\database.php 中指定认证数据库:

'mongodb' => [
    'driver'   => 'mongodb',
    'host'     => env('DB_HOST', 'localhost'),
    'port'     => env('DB_PORT', 27017),
    'database' => env('DB_DATABASE'),
    'username' => env('DB_USERNAME'),
    'password' => env('DB_PASSWORD'),
    'options'  => [
        'database' => 'admin' // <=== here
    ]
],

推荐阅读