You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MongoDB认证失败报错:无已认证用户,无法连接服务器求助

解决MongoError: "there are no users authenticated" 连接问题

看起来你遇到的核心问题是认证上下文不匹配,加上代码里有个小语法错误,咱们一步步来排查:

1. 先修复代码里的语法bug

你的MongoClient.connect调用最后少了一个闭合的),这会导致代码执行失败,先补上:

MongoClient.connect('mongodb://user:password@127.0.0.1:27017/QUIZ_GAME',(err,client)=>{ 
  if(err){ 
    // 建议把错误信息也打出来,方便排查具体问题
    return console.log('unable to connect to the MongoDb server', err); 
  } 
  const db = client.db('QUIZ_GAME'); 
  console.log('connected to the MongoDb server'); 
}) // 这里补上缺失的闭合括号

2. 匹配用户与认证数据库

MongoDB的用户是绑定到特定数据库的,你的连接字符串没指定authSource(认证来源库),导致MongoDB默认用你要连接的QUIZ_GAME库去验证用户,但你创建的用户分两种情况:

情况A:用admin库的root用户连接

你在admin库创建了admin用户(拥有root权限),但连接字符串里用的是user,而且没指定authSource=admin,MongoDB找不到这个用户。修改连接字符串如下:

// 注意用户名改成admin,加上?authSource=admin指定认证库
MongoClient.connect('mongodb://admin:password@127.0.0.1:27017/QUIZ_GAME?authSource=admin',(err,client)=>{ 
  // ... 其他代码
})

情况B:用QUIZ_GAME库的专属用户连接

你提到在QUIZ_GAME库创建用户但没写完,先确保用户创建完整,比如:

# 在Putty里执行完整的用户创建命令
use QUIZ_GAME
db.createUser( { 
  user: "quiz_user", 
  pwd: "your_secure_password", 
  roles: [ { role: "readWrite", db: "QUIZ_GAME" } ] 
} )

然后用这个用户连接(不需要指定authSource,因为用户就在QUIZ_GAME库):

MongoClient.connect('mongodb://quiz_user:your_secure_password@127.0.0.1:27017/QUIZ_GAME',(err,client)=>{ 
  // ... 其他代码
})

3. 确认MongoDB已启用认证

确保你的MongoDB实例启动时开启了认证机制:

  • 如果是命令行启动,要加--auth参数:mongod --auth --dbpath /your/db/path
  • 如果是配置文件启动(mongod.conf),要设置:
    security:
      authorization: enabled
    

如果没开启认证,你创建的用户不会生效,但你的错误提示是认证问题,大概率已经开启,但还是要确认下。

4. 用mongo shell测试连接(快速验证)

先通过shell测试连接是否正常,排除代码之外的问题:

  • 用admin用户测试:
    mongo "mongodb://admin:password@127.0.0.1:27017/QUIZ_GAME?authSource=admin"
    
  • 用QUIZ_GAME用户测试:
    mongo mongodb://quiz_user:your_secure_password@127.0.0.1:27017/QUIZ_GAME
    

如果shell能成功连接,说明用户和密码没问题,再回到代码排查;如果shell也连接失败,检查用户名/密码拼写,或者用户是否创建成功。


内容的提问来源于stack exchange,提问作者roh_dev

火山引擎 最新活动