You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 11:35:03