symfony 未捕获PHP异常MongoDB\驱动程序\异常\验证异常:“验证失败,”

wfveoks0  于 2022-11-16  发布在  PHP
关注(0)|答案(2)|浏览(181)

描述:

我尝试在Symfony应用程序中删除一个mongo集合,但是当我尝试删除一个集合时,我得到一个“验证失败”。我可以选择一个数据库,也可以选择一个集合
我注入到MongoService中的mongoUrl连接字符串使用在我的docker compose中指定的相同凭据:

mongodb://root:XXX@redaph_mongo_1:27017
  • 注意:即使我输入了错误的凭据,我仍然能够选择数据库和集合,而不会引发任何错误。*

问题:

当我使用root凭据尝试删除集合时,为什么会出现“验证失败”?如何正确使用root用户名和密码进行验证?

错误:

[2018-06-21 08:45:41]请求。严重:未捕获PHP异常MongoDB\驱动程序\异常\验证异常:在/var/www/redaph/vendor/mongodb/mongodb/src/Operation/DropCollection. php的第108行,“验证失败”。{“异常”:“[对象](MongoDB\驱动程序\异常\验证异常(代码:11):身份验证失败。请访问/var/www/redaph/vendor/mongodb/mongodb/src/Operation/DropCollection.php:108)"} []

相关代码:

停靠-撰写.yml代码段

version '3':
  services:
    mongo:
      image: mongo
      restart: always
      environment:
        MONGO_INITDB_ROOT_USERNAME: root
        MONGO_INITDB_ROOT_PASSWORD: "XXX"
      volumes:
        - mdb_data:/data/db

MongoService.php代码段:

class MongoService
{
    const QUESTION_RESPONSE_COLLECTION = "question_response";
    const DATABASE_NAME = "redaph";
    private $mongoDB;

    public function __construct($mongoUrl)
    {
        $mongoClient = new MongoClient($mongoUrl);

        $this->mongoDB = $mongoClient->selectDatabase(self::DATABASE_NAME);

    }

    private function getQuestionResponseCollection(){
        return $this->mongoDB->selectCollection(self::QUESTION_RESPONSE_COLLECTION);
    }

    public function generateQuestionResponses(){

        /** code here to populate $questionResponses **/

        $collection = $this->getQuestionResponseCollection();
        #-> Authentication Fails Here
        $collection->drop();
        $results = $collection->insertMany($questionResponses);
        return $results->getInsertedCount();
    }

    public function getQuestionResponses(){
        return $this->getQuestionResponseCollection()->find([]);
    }
}
smtd7mpg

smtd7mpg1#

经过对此事的彻底调查,我改变了我的MongoService的工作方式,我清空了我的Mongo卷。
主要问题是我在创建容器后不久就更改了密码。
MongoService.php

class MongoService
{
    const QUESTION_RESPONSE_COLLECTION = "question_response";
    const DATABASE_NAME = "redaph";
    private $mongoDB;

    public function __construct($mongoUrl, $mongoUsername, $mongoPassword)
    {
        $mongoClient = new MongoClient($mongoUrl, ["authMechanism" => "SCRAM-SHA-1", "username" => $mongoUsername, "password" => $mongoPassword]);
        $this->mongoDB = $mongoClient->selectDatabase(self::DATABASE_NAME);
    }
}

services.yml

parameters:
    locale: 'en'
    env(MONGO_URL): 'mongodb://127.0.0.1:27107'
    env(MONGO_USERNAME): ''
    env(MONGO_PASSWORD): ''
services:
    App\Service\MongoService:
        arguments:
            $mongoUrl: '%env(resolve:MONGO_URL)%'
            $mongoUsername: '%env(resolve:MONGO_USERNAME)%'
            $mongoPassword: '%env(resolve:MONGO_PASSWORD)%'
tcbh2hod

tcbh2hod2#

这个问题是发生由于使用错误的用户名或密码.请检查这两个,但记住这一件事不要使用特殊字符在密码,因为他们使用编码,所以可能创建一个问题给你

相关问题