think-mongo icon indicating copy to clipboard operation
think-mongo copied to clipboard

最新v3.0.4 用mongo子账号提示Authentication Failed

Open hbh112233abc opened this issue 6 years ago • 2 comments

用mongo子账号在客户端可以连接到某个db的,所以权限没问题的,同样的问题在以下链接看到了 tp5 mongodb Authentication failed(认证失败) 建议connector/Mongo.php 135行dsn增加database的配置 修改前:

$config['dsn'] = 'mongodb://' . ($config['username'] ? "{$config['username']}" : '') . ($config['password'] ? ":{$config['password']}@" : '') . $config['hostname'] . ($config['hostport'] ? ":{$config['hostport']}" : '');

修改后

$config['dsn'] = 'mongodb://' . ($config['username'] ? "{$config['username']}" : '') . ($config['password'] ? ":{$config['password']}@" : '') . $config['hostname'] . ($config['hostport'] ? ":{$config['hostport']}" : '').($config['database'] ? "/{$config['database']}" : '');

hbh112233abc avatar Jun 26 '19 05:06 hbh112233abc

https://github.com/top-think/think-mongo/issues/79

liu21st avatar Jun 26 '19 11:06 liu21st

根据 #79 的建议增加params参数问题解决,不过感觉不是很方便,容易踩坑,希望下次踩坑的同学看到这个讨论,最后database.php配置如下:

<?php
use think\facade\Env;

return [
    // 默认使用的数据库连接配置
    'default'         => Env::get('database.driver', 'mysql'),

    // 数据库连接配置信息
    'connections'     => [
        'mysql' => [
            ...
        ],

        // 更多的数据库配置信息
        'mongo' => [
            // 数据库类型
            'type'     => '\think\db\connector\Mongo',
            // 设置查询类
            'query'    => '\think\db\Mongo',
            // 服务器地址
            'hostname' => Env::get('mongo.hostname', '127.0.0.1'),
            // 集合名
            'database' => Env::get('mongo.database', 'efiles'),
            // 用户名
            'username' => Env::get('mongo.username', 'efile'),
            // 密码
            'password' => Env::get('mongo.password', ''),
            // 端口
            'hostport' => Env::get('mongo.hostport', 27017),
            'params'   => [
                'authSource' => Env::get('mongo.database', 'efiles'),
            ],
        ],
    ],

    // 自定义时间查询规则
    'time_query_rule' => [],
    // 自动写入时间戳字段
    'auto_timestamp'  => 'timestamp',
    // 时间字段取出后的默认时间格式
    'datetime_format' => 'Y-m-d H:i:s',
];

最主要的是在mongo的连接配置增加:

'params'   => [
       'authSource' => Env::get('mongo.database', 'efiles'),
],

hbh112233abc avatar Jun 27 '19 03:06 hbh112233abc