Node.js+Express项目连接MongoDB Atlas遇find权限错误排查
问题描述
我正在用Node.js和Express开发项目,数据库连接已成功建立,但访问localhost:3001/api/plans时,控制台报错:
MongoServerError: user is not allowed to do action [find] on [git_flow.plans]
浏览器返回的错误信息:
success false ok 0 code 8000 codeName "AtlasError"
以下是我的user-router.js、user-ctrl.js以及User模型文件代码,请问问题出在哪里?
user-router.js
import express from 'express'; import * as UserCtrl from '../controllers/user-ctrl.js'; const router = express.Router() router.get('/github/auth/redirect', UserCtrl.redirectGithub) router.post('/users', UserCtrl.createUser) router.put('/user/:id', UserCtrl.updateUser) export default router
user-ctrl.js
export const redirectGithub = async (req, res) => { let code = req.query.code; console.log(req.query.code); if(!code) { return res.send({ success: false, message: 'Error: no code' }) } User.findOne({ githubAuthing: true }, (err, user) => { if (err) { return res.status(400).json({ success: false, error: err }) } user.githubAuthing = false; user.code = code; console.log(user.redirect_uri); user .save() .then(() => { res.redirect(user.redirect_uri); }) }).clone().catch(err => console.log(err)) }
User模型文件
import mongoose from 'mongoose'; const Schema = mongoose.Schema const User = new Schema( { settings: { type: String, required: false }, plan: { type: mongoose.ObjectId, required: false }, introCompleted: { type: Number, required: false }, session_id: { type: mongoose.ObjectId, required: true }, githubToken: { type: String, required: false }, githubUser: { type: Object, required: false }, repo: { type: Object, required: false }, shop: { type: String, required: false }, githubAuthing: { type: Boolean, required: false }, code: { type: String, required: false }, redirect_uri: { type: String, required: false }, }, { timestamps: true }, ) export default mongoose.model('users', User)
问题分析与解决
报错信息明确指向MongoDB Atlas的权限问题:当前数据库用户没有权限对git_flow库下的plans集合执行find操作。你提供的代码都是针对users集合的操作,和报错的plans集合无关联,所以问题不在这些代码里。
解决步骤:
- 登录MongoDB Atlas控制台,进入你的项目和对应集群。
- 打开「Database Access」页面,找到当前连接数据库的用户账号。
- 点击该用户的「Edit」按钮,修改权限配置:确保授予了对
git_flow数据库(或指定plans集合)的read权限,或直接分配readWrite角色(需读写操作时)。 - 保存权限设置,等待1-2分钟让权限生效后,重新测试
/api/plans接口。
内容的提问来源于stack exchange,提问作者Hayley
相关产品推荐
相关产品推荐

