0

I am working with Nodejs,I am using Expressjs,Right now i am tring to run project,Connection established successfully but whenever i try to use url (localhost:3001/api/plans) then i am getting following error in console

MongoServerError: user is not allowed to do action [find] on [git_flow.plans]

And i am getting following error in my browser

success false
ok  0
code    8000
codeName    "AtlasError"

Here is my "user-router.js" file

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
Here is my controller file (user-ctrl.js) file code
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))
}
H

ere is my model file,Where i am wrong ?

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)


Hayley
  • 9
  • 1

1 Answers1

0

You can not use save() method with the mongoose findOne() returned user you have to pass the user data into the mongoose model and then you can use .save() like new User(user).save() as below mentioned can use it.

  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);

    new User(user).save()
    .then(() => {
        res.redirect(user.redirect_uri);
    })

  }).clone().catch(err => console.log(err))