Laravel为MongoDB执行数据填充时认证数据库配置错误如何解决
问题根因
你当前的配置冲突是因为配置了dsn参数后,jenssegers/laravel-mongodb扩展会优先解析DSN字符串中的配置,你单独声明的username、password、options中的认证数据库配置都会被直接忽略,所以你加在options里的admin认证库配置完全没有生效,程序默认拿你配置的database参数(也就是definitely_exists_but_not_admin)作为认证库,才会报错找不到用户。
解决方案二选一即可
方案1:保留DSN配置,直接修改DSN字符串
在你的MONGO_DSN环境变量末尾追加authSource=admin参数即可,示例DSN格式如下:
mongodb://root:你的密码@127.0.0.1:27017/?authSource=admin
如果你的DSN中已经带了业务库名,也可以调整为:
mongodb://root:你的密码@127.0.0.1:27017/definitely_exists_but_not_admin?authSource=admin
调整后可以把config/database.php中mongodb配置项下的host、port、username、password、options数组都删除,避免冗余配置冲突。
方案2:删除DSN配置,走单独参数解析
直接删掉mongodb配置中的这一行:
'dsn' => env('MONGO_DSN'),
删除后扩展会自动读取你单独配置的host、端口、账号密码,以及options中的database => 'admin'作为认证数据库,不需要修改其他配置。
最后操作
配置修改完成后,一定要执行以下命令清除Laravel的配置缓存,否则修改不会生效:
php artisan config:clear
内容的提问来源于stack exchange,提问作者starleaf1
相关产品推荐
相关产品推荐

