Tp5连接MongoDB报:Authentication failed解决方案

Tp5连接MongoDB报:Authentication failed解决方案

PHP的MongoDB扩展:MongoDB 1.4.1

报错信息:Authentication failed

原因

tp5 think-mongo扩展 当使用普通用户连接数据库时会报:Authentication failed(认证失败),原因是 think-mongo扩展连接数据库认证的时候没有带上数据库名!
连接串为:mongodb://{username}:{password}@{hostname}:{hostport}
应改为:mongodb://{username}:{password}@{hostname}:{hostport}/{dbName}

修改方式

/vendor/topthink/think-mongo/src/connection.php中的第152行

// 在这段代码的最后加上 ."/".$this->dbName;
$host = 'mongodb://' . ($config['username'] ? "{$config['username']}" : '') . ($config['password'] ? ":{$config['password']}@" : '') . $config['hostname'] . ($config['hostport'] ? ":{$config['hostport']}" : '')."/".$this->dbName;

这里再顺道记录一下,tp5怎么连接mongodb

配置格式

 $config=[
        'type'    =>   '\think\mongo\Connection',// tp5底层配置
        'hostname'    =>   '',// mongodb服务器名
        'database'    =>   '',// mongodb的连接数据库
        'username'    =>   '',// mongodb的用户名
        'password'    =>   '',// mongodb的密码
        'hostport'    =>   27017,// 端口,一般是这个,看你的具体情况
    ];

TP5连接方式

Db::connect($config);

或者也可以把上面的配置写在config.php中,这里直接用对应的配置,如

config.php

'db_monogo'=>[
        'type'    =>   '\think\mongo\Connection',// tp5底层配置
        'hostname'    =>   '',// mongodb服务器名
        'database'    =>   '',// mongodb的连接数据库
        'username'    =>   '',// mongodb的用户名
        'password'    =>   '',// mongodb的密码
        'hostport'    =>   27017,// 端口,一般是这个,看你的具体情况
    ]
Db::connect('db_mongo');

你可能感兴趣的:(thinkphp,mongodb)