Доступ Express Сессия / Запрос на - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть следующий код:

    router.use('*', (req, res, next) => {
        if (!req.user || req.user.adminLevel <= 0 ) {
            logger.info("User has no Admin Level to access /admin")
            res.status(401).json({"errorCode" : "403", "error" : "Forbidden" })
        }
        else {
            logger.info("User has Admin Access, performing action")
            next()
        }
    })





    router.post('/new', controller.validadeUser(), controller.validate, controller.createUser);
    validate: (req, res, next) => {
        var errors = validationResult(req);
          if (!errors.isEmpty()) {
            return res.status(422).json({ errors: errors.array() });
          } else {
            next()
        }
    },
    validadeUser: () => { 
        return [
            check('username').not().isEmpty().withMessage('Name is Required'),
            check('password').not().isEmpty().withMessage('Password is Required'),
             check('adminLevel').custom(value => {
                if (value >  REQ.USER.LEVEL)
                    return Promise.reject("You can't add " + value + " if you are only" + REQ.USER.LEVEL)

            })]
    },

    createUser: (req, res, next) => {
        logger.info("Creating User", req.body)

        const user = new User(req.body.username, req.body.email, req.body.level, req.body.adminLevel, req.body.password)
        User.newUser(user)
            .then((results) => {
                res.status(200).json({"done" : true})
            }).catch(err => {
                logger.debug("Fail to create the user", err)
                res.status(500).json({"done" : false})
            })
     }

Кроме того, req.user проверяется в предыдущем промежуточном программном обеспечении. Но мой вопрос не связан с безопасностью.

У меня вопрос, как я могу получить доступ к сеансу внутри controller.validadeUser () ??

На validadeUser () я не Нет доступа ни к запросу, ни к сеансу. Но я хочу сделать проверку там. это возможно, или я должен разделить проверку и сделать это по методу проверки?

Я попытался добавить parms (req, res, next) в validadeUser, но все это пусто.

спасибо.

1 Ответ

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

Я нашел, как это сделать. Просто нужно было добавить запрос на пользовательскую проверку:

check('adminLevel').custom((admLevel, { req }) => {
...