Express ограничить маршруты для пользовательских ролей - PullRequest
0 голосов
/ 25 апреля 2020

Я создаю nodejs & express с приложением mongoDB, которое требует регистрации компании и пользователя. Когда вы заполняете регистрационную форму, это будет выглядеть так, как если бы вы были компанией или обычным пользователем.

Модель для этого

iscompany: {
    type: Boolean,
    default: false,
},

Я создал промежуточное ПО для проверки, является ли человек компанией, и это промежуточное ПО

module.exports = function(req, res, next) {
    if (!req.user.iscompany) {
      return res.status(401).json({
          msg: "you should be a company to access this. authorization denied",
      });
    }

    next();
};

, затем я импортировал промежуточное ПО на маршрутах я хочу использовать его, и это код.

const role = require("../../middleware/role");
const User = require("../../models/User");
const Company = require("../../models/Company");
const { check, validationResult } = require("express-validator");

//@route GET api/company/me
//@desc get current users profile
//access Private
router.get("/me", auth, role, async(req, res) => {
    try {
        const company = await Company.findOne({
            user: req.user.id,
        }).populate("user", ["avatar", "fullname"]);
        if (!company) {
            res.status(400).json({
                msg: "no company found",
            });
        }
        res.json(company);
    } catch (e) {
        console.error(e.message);
        res.status(400).send("server error");
    }
});

Я не понимаю, что, если не так, это позволяет как компаниям, так и не компаниям получить доступ к маршруту.

Любая помощь?

1 Ответ

0 голосов
/ 25 апреля 2020

У меня проблема с этим

    if (!req.user.iscompany) {
      return res.status(401).json({
          msg: "you should be a company to access this. authorization denied",
      });
    }

    next();
};

, почему бы не объявить вашу функцию перед тем, как пытаться экспортировать ее, кроме экспорта всего тела функции сразу внутри модуля module.exports.

Попробуйте использовать функцию со стрелкой, что-то вроде этого.


const auth = (req, res, next) {
if(!req.user.iscompany){
return res.status(401).json({msg: "You should be a company to access this. Authorization denied})
}
next();

module.exports = auth // for just exporting a single file   
module.exports = {
         auth       // for exporting multiple files. This is a shorthand syntax the n 
                    // property name must relate to the function name
}

// Then you can now import  into your router file and require it for single file

const auth  = require('../middleware/auth')

// you can do this for multiple file 

const {auth, if any} = require('../middleware/auth')

Думаю, проблема должна быть в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...