He configurado por primera vez la autenticación para MongoDB. Tengo dos usuarios: 'admin', (establecido como root en la base de datos 'admin') y 'testUser' que está configurado como 'dbAdmin' en 'testDatabase'.
Cuando uso mongo shell para iniciar sesión con el siguiente comando, todo funciona:
mongo -u testUser -p abcd1234 --authenticationDatabase testDatabase
Al final de PHP, tengo el siguiente código:
<?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); } } ?>
Naturalmente, el host (así como el nombre de la base de datos, el nombre de usuario y la contraseña) están ofuscados. He verificado varias veces que no hay un error tipográfico en las credenciales. También verifiqué que puedo conectarme a la base de datos desde un shell remoto, similar a cómo se conecta este script.
Aún así, siempre me sale este error:
Error fatal de PHP: excepción no detectada 'MongoConnectionException' con el mensaje 'Error al conectarse a: 1.1.1.1:27017: La autenticación falló en la base de datos 'testDatabase' con el nombre de usuario 'testUser': error de autenticación' en /var/www/html/wip/include /mongoConnect.php:17 Rastreo de pila: 0 /var/www/html/wip/include/mongoConnect.php(17): MongoClient->__construct('mongodb://1.1...', Array) 1 /var/ www/html/wip/include/mongoConnect.php(27): DBConnection->__construct() 2 /var/www/html/wip/migration/migrate.php(85): DBConnection::instanciate() 3 {principal} lanzado en /var/www/html/wip/include/mongoConnect.php en la línea 17
Las credenciales de ambos usuarios están en SCRAM-SHA-1. ¿Alguna idea de qué está causando este problema de conexión?
Puedes intentar cambiar la forma de iniciar sesión
$m = new MongoClient("mongodb://${nombre de usuario}:${contraseña}@localhost");
Echa un vistazo aquí:
http://php.net/manual/en/mongo.connecting.auth.php