描述:
我尝试在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([]);
}
}
2条答案
按热度按时间smtd7mpg1#
经过对此事的彻底调查,我改变了我的MongoService的工作方式,我清空了我的Mongo卷。
主要问题是我在创建容器后不久就更改了密码。
MongoService.php
services.yml
tcbh2hod2#
这个问题是发生由于使用错误的用户名或密码.请检查这两个,但记住这一件事不要使用特殊字符在密码,因为他们使用编码,所以可能创建一个问题给你