Drupal站点连接MongoDB遇AuthenticationException认证失败错误求助
我来帮你一步步排查这个认证失败的问题,这些都是我在实际项目里踩过坑后总结的有效方案:
先确认核心认证凭证是否正确
先去检查Drupal的settings.php里的MongoDB连接配置,确保用户名、密码、认证数据库(默认是admin,除非你给用户指定了其他归属库)完全匹配MongoDB端的设置——尤其要注意大小写敏感,比如数据库名MyDB和mydb是两个不同的库,用户名也是同理。
举个正确的配置示例:$settings['mongodb']['connections']['default'] = 'mongodb://your_username:your_password@mongo_host:27017/your_auth_db';这里的
your_auth_db必须是你在MongoDB中创建用户时指定的数据库(比如use admin; db.createUser(...)的话,这里就填admin)。验证MongoDB用户的权限与认证机制
登录MongoDB的shell,执行以下命令检查用户信息:use your_auth_db; db.getUser('your_username');查看输出里的
roles字段,确认该用户拥有你要连接的目标数据库的读写权限(比如readWrite角色)。另外,注意认证机制是否匹配——如果你的MongoDB用的是SCRAM-SHA-256,而Drupal连接时默认用了旧的SCRAM-SHA-1,也会导致认证失败,这时候需要在连接字符串里显式指定:$settings['mongodb']['connections']['default'] = 'mongodb://your_username:your_password@mongo_host:27017/your_auth_db?authMechanism=SCRAM-SHA-256';排查网络与MongoDB服务端配置
- 检查MongoDB的配置文件(
mongod.conf),确认bindIp没有只限制本地访问(如果Drupal和MongoDB不在同一服务器的话),可以设置为0.0.0.0允许所有IP,或者指定Drupal服务器的IP。 - 确认MongoDB服务端已经开启了认证功能(
security.authorization设置为enabled)——如果没开启认证,但你在Drupal里填了用户名密码,反而会触发认证失败;反之,如果开启了认证但没填凭证,也会报错。
- 检查MongoDB的配置文件(
检查Drupal MongoDB模块的兼容性与配置
- 确认你使用的Drupal MongoDB相关模块(比如
mongodb、mongodb_storage)的版本和MongoDB服务器版本兼容,比如MongoDB 6.x需要较新的模块版本,旧模块可能不支持新的认证机制。 - 再仔细核对
settings.php里的配置键名,有没有拼写错误(比如把mongodb写成mongdb),这类低级错误很容易被忽略。
- 确认你使用的Drupal MongoDB相关模块(比如
用MongoDB Shell直接测试连接
从Drupal所在的服务器上,执行以下命令测试连接:mongosh "mongodb://your_username:your_password@mongo_host:27017/your_auth_db"如果shell都连不上,那问题肯定出在MongoDB端或者网络,和Drupal无关;如果shell能正常连接,那就要重点排查Drupal的模块配置或者版本兼容性问题。
内容的提问来源于stack exchange,提问作者Anas P H

