使用express-jwt进行基于角色的授权?

时间:2016-03-31 17:59:42

标签: node.js express express-jwt

我正在使用express-jwt保护我的API端点,以便只有经过身份验证的用户才能访问我的API。现在我也希望根据用户的角色保护我的API。例如,如果用户是管理员,则用户只能访问某些API,如果他们是超级管理员,则只能访问其他API等。如何实现此目的?我在express-jwt github doc中找到了这段代码:

def

看起来这段代码正在API控制器功能中进行授权。这是唯一的推荐方式吗?有没有更好的方法来做到这一点?有关此方法的最佳实践的建议吗?

1 个答案:

答案 0 :(得分:6)

  

这是唯一的推荐方式吗?

非常,是的。

但是,这不是一个"控制器功能"。这是中间件的一个例子,在这种情况下你想要使用它。

更完整的例子是:


var router = new express.Router();

// process jwt stuff
var processjwt = jwt({secret: 'shhhhhhared-secret'});

// authorization check
function authorizationCheck(req, res, next) {
  if (!req.user.admin) { 
   return res.sendStatus(401);
  } else {
    // move to the next middleware, cause it's ok
    next();
  } 
}

// the real route handler
function myRouteHandler(req, res){
  doSomeWork(function(err, data){
    if (err) { return next(err); }
    res.json(data);
  });
}

// put it all together
router.use("/protected", processjwt, authorizationCheck);
router.get("/protected", myRouteHandler);

这个设置有很多可以使用的变体,但这可以解决这个问题。