我正在尝试编写API,其中一些具有基于角色的授权。此外,我正在使用JWT进行API的身份验证。
下面是代码,我正在尝试编写。但是,当我点击“ / user /:email”端点时,未调用授权功能。总是会调用 getUser 函数。我当时以为,首先应先调用授权功能,然后再调用 getUser 。
有人可以启发我为什么我点击“ / user /:email”端点时没有调用 authorize 函数吗?我在这里做什么错?我该如何正确处理这种情况?
var express = require('express')
var router = express.Router();
var expressJwt = require('express-jwt');
var authorize = function(role){
expressJwt({secret:'secretKey'}, (req, res, next) =>{
console.log('req.role is', req.role);
if(req.role === role){
next();
}else{
res.status(403).send({message: 'Unauthorized'});
}
})
}
var getUser = function(req,res,next){
res.status(200).send("Hello user");
}
router.get('/user/:email', authorize('Admin'), getUser);
答案 0 :(得分:1)
authorize
是在应用程序启动时调用的,而不是在您单击“ / user /:email”时调用的。调用authorize('Admin')
只会返回未定义,这不会导致console.log
被执行,也不会在命中“ / user /:email”时发生。
我认为您想要实现的是将多个回调顺序地应用于一条路由。
请参见here
因此,authorize('Admin')
应该返回中间件(也称为回调),例如:
return expressJwt({secret:'secretKey'}, (req, res, next) =>{...})