如何解决VPS部署时出现MongoError: command find requires authentication问题
排查方案
- 优先确认环境变量加载状态
你看到的「连接成功」日志仅代表TCP连接建立完成,MongoDB建立连接时不会校验权限,仅在执行具体操作时才会触发认证校验,所以首先在服务端配置中打印process.env.USER_MONGO_MYDB、process.env.PASSWORD_MONGO_MYDB的值,确认VPS部署时这两个环境变量已正确加载,值和你seed-data.js中创建的用户名密码完全一致。大部分同类问题都是部署时忘记同步.env文件,或者服务启动时没有加载环境变量,导致用户名密码为空,匿名连接后执行操作触发报错。 - 补充认证源配置
你在seed-data.js中创建的用户归属mydb库,Mongoose默认会去admin库校验用户身份,需要在connectionOptions中添加authSource: "mydb"指定认证源,配置示例:
也可以直接将认证信息写入连接URL,减少配置歧义:connectionOptions: { user: process.env.USER_MONGO_MYDB, pass: process.env.PASSWORD_MONGO_MYDB, authSource: "mydb", useNewUrlParser: true, useUnifiedTopology: true }mongodb://用户名:密码@127.0.0.1:27017/mydb?authSource=mydb - 命令行直连验证用户权限
在VPS上直接用Mongo客户端测试连接,执行命令:
连接成功后执行一次简单的查询操作,如果同样报错,说明用户创建异常。mongo mongodb://你的用户名:你的密码@127.0.0.1:27017/mydb?authSource=mydb - 清理旧数据重新初始化
放在docker-entrypoint-initdb.d中的初始化脚本仅会在容器第一次启动、/data/db目录为空时执行,如果之前启动过无认证的Mongo容器,或者修改过用户配置后没有清空持久化卷,旧数据会导致新配置不生效。可以停掉Mongo容器,删除宿主机的./database目录,再重新启动容器完成用户初始化。
内容的提问来源于stack exchange,提问作者nepriel
相关产品推荐
相关产品推荐

