文章大纲

Thinkphp6 连接mongodb报authentication fail错误

2022-09-30 11:39:52

今天在thinkphp6框架里连接mongodb,报authentication fail错误,如下图所示:



修改框架底层文件

网上查到的解决方法如下,但是对我无效:

 //文件位置:/vendor/topthink/think-orm/src/db/connector/Mongo.php
if (empty($config['dsn'])) {
       $config['dsn'] = 'mongodb://' . ($config['username'] ? "{$config['username']}" : '') . ($config['password'] ? ":{$config['password']}@" : '') . $config['hostname'] . ($config['hostport'] ? ":{$config['hostport']}" : '');
       $config['dsn'] .= ($config['database'] ? "/{$config['database']}" : '');  //添加此行代码
}

修改之前打印出来的连接地址格式如下(非真实地址,仅供参考格式):

mongodb://test_admin:9YHrere#kdl@10.195.13.190:27017


按照上面修改,带上数据库名称,仍然无效:

mongodb://test_admin:9YHrere#kdl@10.195.13.190:27017/school


检验mongodb连接地址

为了检验上面地址到底有没有问题,就打算本地先命令行连接试试。

结果我本地Windows安装的是Mongodb Server 6.0版本。

好巧不巧,此版本里不提供mongodb的客户端脚本(即mongo.exe),只有mongod.exe和mongos.exe。

                                             


所以需要我们另外下载客户端工具mongo shell,下载地址:mongo shell下载


安装好后,将上面连接地址输入,报的错误更加具体,立马就可以发现问题了:就是数据库连接密码中的特殊符号#导致的。

MongoParseError: Password contains unescaped characters


修改密码

为了避免去改thinkphp框架底层代码,就只好去改密码了。

use admin;
db.changeUserPassword("test_admin","123456789G");

改好后,就连接成功了。所以/vendor/topthink/think-orm/src/db/connector/Mongo.php这个文件的代码并没有问题哈。




我要评论
评论列表