在 express.js 上 "role based authentication middleware" 需要更好的方法

Need a better way for "role based authentication middleware" on express.js

我做了什么:

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

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

我想做的事情:

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

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

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

谢谢。

所有 express 中间件都应该 return 接受三个参数(请求、响应、下一个)的函数。在您的情况下,您的中间件被注册为一个对象。相反,return 来自 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);