使用 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 错误的主要内容,如果未能解决你的问题,请参考以下文章