MongoDB PHP驱动程序无法连接和验证

时间:2017-01-02 14:09:15

标签: php mongodb

我第一次为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中。 知道造成这种连接问题的原因是什么吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试更改登录方式

  

$ m = new MongoClient(“mongodb:// $ {username}:$ {password} @localhost”);

看看这里:
http://php.net/manual/en/mongo.connecting.auth.php