Laravel MongoDB - 命令删除需要身份验证

Posted

技术标签:

【中文标题】Laravel MongoDB - 命令删除需要身份验证【英文标题】:Laravel MongoDB - command delete requires authentication 【发布时间】:2021-11-22 21:55:17 【问题描述】:

使用 Mongodb 作为数据库开发 Laravel 应用,今天遇到了一个奇怪的问题。

不知何故,当我使用该应用程序时,在任何需要使用 mongo 命令的地方,我都会收到“命令需要身份验证”。这显然意味着我没有连接到数据库,但是“php artisan migrate --database=mongodb”确实可以正常工作,所有索引等都已创建。

使用与我的 .env 中相同的凭据,我可以使用 Compass 连接到数据库。

该应用是否有任何理由使用与 migrate 命令不同的配置?

供参考:

config/database.php
'mongodb' => [
            'driver' => 'mongodb',
            'host' => env('MONGO_DB_HOST', 'localhost'),
            'dsn' => env('MONGO_DB_DSN', 'mongodb://') . env('MONGO_DB_HOST', 'localhost'),
            'port' => 27017,
            'database' => env('MONGO_DB_DATABASE', 'rte_golf'),
            'username' => env('MONGO_DB_USERNAME'),
            'password' => env('MONGO_DB_PASSWORD'),
            'options' => [
                // here you can pass more settings to the Mongo Driver Manager
                // see https://www.php.net/manual/en/mongodb-driver-manager.construct.php under "Uri Options" for a list of complete parameters that you can use
                'database' => env('DB_AUTHENTICATION_DATABASE', 'admin'), // required with Mongo 3+
            ],
        ],
.env
MONGO_DB_HOST=mongodb
MONGO_DB_DATABASE=rte_golf
MONGO_DB_USERNAME=username
MONGO_DB_PASSWORD=password
docker-compose 创建 mongo 镜像
mongodb:
    image: mongo
    restart: always
    ports:
      - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: username
      MONGO_INITDB_ROOT_PASSWORD: password
    networks:
      - backoffice

【问题讨论】:

【参考方案1】:

考虑将以下行添加到您的 docker-compose 以启用身份验证模式

 command: [--auth]

例如

version: '3.3'

services:
   mongo:
      container_name: mongodb
      image: mongo
      ports:
       - "27017:27017"
      volumes:
       - mongodbdata:/data/db
      command: [--auth]
      restart: always
volumes:
   mongodbdata:

networks:
   default:
      external:
         name: mongo-network

【讨论】:

身份验证模式已经启用,但环境:MONGO_INITDB_ROOT_USERNAME:用户名 MONGO_INITDB_ROOT_PASSWORD:密码

以上是关于Laravel MongoDB - 命令删除需要身份验证的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 和 Artisan 在 Laravel 5 和 Lumen 上进行迁移

MongoDB——文档操作(删除文档)

MongoDB——文档操作(删除文档)

基于Vue + Node.js + MongoDB的图片上传组件,实现图片的预览和删除

Laravel 和 MongoDB 以及高级角色/权限系统

如何从命令行删除 MongoDB 集合?