Access Express Session/Request 上
Access Express Session/Request on the
我有以下代码:
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() 中的 session ??
在 validadeUser() 上,我无权访问请求,也无权访问会话。但我想在那里进行验证。有可能还是我必须拆分验证并在验证方法上进行?
我试图将参数 (req, res, next) 添加到 validadeUser,但它都是空的。
谢谢。
我找到了方法。
只需在自定义验证中添加请求:
check('adminLevel').custom((admLevel, { req }) => {
我有以下代码:
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() 中的 session ??
在 validadeUser() 上,我无权访问请求,也无权访问会话。但我想在那里进行验证。有可能还是我必须拆分验证并在验证方法上进行?
我试图将参数 (req, res, next) 添加到 validadeUser,但它都是空的。
谢谢。
我找到了方法。 只需在自定义验证中添加请求:
check('adminLevel').custom((admLevel, { req }) => {