我第一次为MongoDB设置了身份验证。我有两个用户:'admin',(在'admin'数据库中设置为root)和'testUser',在'testDatabase'中设置为'dbAdmin'。
当我使用mongo shell使用以下命令登录时,一切正常:
mongo -u testUser -p abcd1234 --authenticationDatabase testDatabase
在PHP结束时,我有以下代码:
<?php
class DBConnection {
const HOST = '1.1.1.1';
const PORT = 27017;
const DBNAME = 'testDatabase';
const USERNAME = 'testUser';
const PASSWORD = 'abcd1234';
private static $instance;
public $connection;
public $database;
private function __construct() {
if (!extension_loaded('mongo')) die("MongoDB is not installed!");
try {
$this->connection = new MongoClient('mongodb://'.self::HOST.':'.self::PORT.'/'.self::DBNAME, array('username' => self::USERNAME, 'password' => self::PASSWORD));
$this->database = $this->connection->selectDB(self::DBNAME);
} catch (MongoConnectionException $e) {
throw $e;
}
}
static public function instantiate() {
if (!isset(self::$instance)) {
$class = __CLASS__;
self:: $instance = new $class;
}
return self::$instance;
}
public function getCollection($name) {
return $this->database->selectCollection($name);
}
public function execute($code) {
return $this->database->execute($code);
}
}
?>
当然,主机(以及数据库名称,用户名和密码)是混淆的。我已多次验证凭据中没有拼写错误。我还验证了我可以从远程shell连接到数据库,类似于此脚本的连接方式。
但是,我总是得到这个错误:
PHP致命错误:未捕获异常'MongoConnectionException' 消息'无法连接到:1.1.1.1:27017:身份验证 使用用户名'testUser'在数据库'testDatabase'上失败:auth failed'in /var/www/html/wip/include/mongoConnect.php:17堆栈跟踪: 0 /var/www/html/wip/include/mongoConnect.php(17):MongoClient-&gt; __ construct('mongodb://1.1 ...',Array) 1 /var/www/html/wip/include/mongoConnect.php(27):DBConnection-&gt; __ construct() 2 /var/www/html/wip/migration/migrate.php(85):DBConnection :: instantiate() 第17行的/var/www/html/wip/include/mongoConnect.php中引用3 {main}
两个用户的凭据都在SCRAM-SHA-1中。 知道造成这种连接问题的原因是什么吗?
答案 0 :(得分:1)
您可以尝试更改登录方式
$ m = new MongoClient(“mongodb:// $ {username}:$ {password} @localhost”);