需要在express.js上使用“基于角色的身份验证中间件”的更好方法

问题描述

我所做的:

router.get('/apps',authController.authenticateUser,appController.getApps);

router.get('/roles',authController.authenticateAdmin,roleController.getRoles);

我想做什么:

router.get('/apps',authController.authenticate('USER'),authController.authenticate('ADMIN'),roleController.getRoles);

当我像这样传递参数时,出现此错误==> 错误:Route.post()需要回调函数,但得到了一个[object Undefined]

谢谢。

解决方法

所有快速中间件都应返回一个接受三个参数(请求,响应,下一个)的函数。在您的情况下,您的中间件已注册为对象。而是从authenticate()方法返回匿名函数(关闭),并将其作为快速中间件进行抵制。

AuthController:

module.exports.authenticate = function (role) {
   return function(req,res,next) {
      //add your authentication logic here based on the role
   }
}

路由器

router.get('/apps',authController.authenticate('USER'),appController.getApps);