con*_*nit 7 node.js express express-jwt
我使用express-jwt保护我的API端点,以便只有经过身份验证的用户才能访问我的API.现在我也想根据用户的角色保护我的API.例如,如果用户是管理员,则用户只能访问某些API,如果他们是超级管理员,则只能访问其他API等.如何实现此目的?我在express-jwt github doc中找到了这段代码:
app.get('/protected',
jwt({secret: 'shhhhhhared-secret'}),
function(req, res) {
if (!req.user.admin) return res.sendStatus(401);
res.sendStatus(200);
});
Run Code Online (Sandbox Code Playgroud)
看起来这段代码正在API控制器功能中进行授权.这是唯一的推荐方式吗?有没有更好的方法来做到这一点?有关此最佳做法的任何建议吗?
这是唯一的推荐方式吗?
差不多,是的.
但这不是"控制器功能".这是中间件的一个例子,在这种情况下你想要使用它.
一个更完整的例子是:
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);
Run Code Online (Sandbox Code Playgroud)
这个设置有很多可以使用的变种,但这可以解决这个问题.
| 归档时间: |
|
| 查看次数: |
4077 次 |
| 最近记录: |