使用 Laravel 播种 MongoDB 时的 authenticationDatabase 错误

Posted

技术标签:

【中文标题】使用 Laravel 播种 MongoDB 时的 authenticationDatabase 错误【英文标题】:Wrong authenticationDatabase when seeding MongoDB with Laravel 【发布时间】:2021-11-28 06:39:39 【问题描述】:

我有一个使用 MongoDB 的 Laravel 应用程序。 我一般不熟悉 Laravel 或 php,但我只是四处寻找东西并关注日志。项目所有者已经设置了一些基本配置和.env,但在某些情况下,开发人员必须自己修改。

当我遇到Authentication failed 错误时,我正在尝试为数据库播种。阅读此 GitHub 问题后:

Authentication Error · Issue #21 · jenssegers/laravel-mongodb · GitHub

我尝试改变一些东西,这是我的config/database.php的部分

'mongodb' => [
            'driver' => 'mongodb',
            'dsn' => env('MONGO_DSN'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'username' => env('DB_USERNAME'),
            'password' => env('DB_PASSWORD'),
            'port' => env('MONGO_PORT'),
            'database' => env('MONGO_DATABASE'), // value: "definitely_exists_but_not_admin"
            'options' => [
                'database' => 'admin',
                'db' => 'admin'
            ]
        ],

当我再次运行它时,它拒绝使用admin 作为身份验证数据库。这是 Mongo 日志的内容(注意 attr.authenticationDatabase 的值):


  "t":
    "$date":"2021-10-08T08:54:33.091+00:00"
  ,
  "s":"I",
  "c":"ACCESS",
  "id":20249,
  "ctx":"conn4",
  "msg":"Authentication failed",
  "attr":
    "mechanism":"SCRAM-SHA-1",
    "speculative":false,
    "principalName":"root",
    "authenticationDatabase":"definitely_exists_but_not_admin",
    "remote":"****",
    "extraInfo":
      
    ,
    "error":"UserNotFound: Could not find user \"root\" for db \"definitely_exists_but_not_admin\""
  

有什么我应该改变的吗?

【问题讨论】:

【参考方案1】:

mongo sample 表示可以使用 uri

'connections' => [
  mongodb' => [
    'driver' => 'mongodb',
    'dsn' => env('DB_URI', 'mongodb+srv://username:password@127.0.0.1/myappdb?retryWrites=true&w=majority'),
    'database' => 'myappdb',
],

如果是这样,那么您可以尝试为authenticationDatabase 添加一个参数以使用like

mongodb+srv://username:password@127.0.0.1/myappdb?retryWrites=true&w=majority&authSource=admin

authSource=admin 告诉authenticationDatabase 使用管理员集合。或者authSource=admin 可能会通过选项。 (没有安装 laravel 来测试,但 uri 中的 authSource 对我有用)

【讨论】:

以上是关于使用 Laravel 播种 MongoDB 时的 authenticationDatabase 错误的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 8 Jetstream:无法使用使用工厂和播种机播种的帐户登录

Laravel - 播种关系

如何在 Node/MongoDB 中播种依赖数据

Laravel 5 播种

使用 Laravel 5.4 播种功能时出错

使用 Laravel 5 中的 --force 进行生产时,数据库卡在使用播种机迁移